检查 Pandas 系列中值的真实性
Check Truthiness of Values in Pandas Series
在pandas中,是否可以构造一个使用自定义对象进行索引的布尔系列?
即
class Test():
def __init__(self, num):
self.num = num
def __bool__(self):
return self.num == 3
x = Test(2)
y = Test(3)
df = pd.DataFrame({'A':[x,y]})
print(bool(df['A'].iloc[1]))
print(df.where(df['A'] == True))
returns
True
A
0 NaN
1 NaN
我想要的是
True
A
0 False
1 True
或类似的,以便我可以使用 .first_valid_index() 来获取不同函数中的第一次出现。
有什么方法可以检查对象的“真实性”以构建新系列吗?
不要使用 ==
。 map
bool
改为
df.where(df['A'].map(bool))
A
0 NaN
1 <__main__.Test object at 0x000002A70187E6D0>
或astype(bool)
df.where(df.astype(bool))
A
0 NaN
1 <__main__.Test object at 0x000002A70187E6D0>
但是,如果您定义 __eq__
class Test():
def __init__(self, num):
self.num = num
def __bool__(self):
return self.num == 3
def __eq__(self, other):
if isinstance(other, type(self)):
return bool(other) == bool(self)
else:
try:
return type(other)(self) == other
except:
return False
x = Test(2)
y = Test(3)
df = pd.DataFrame({'A':[x,y]})
print(bool(df['A'].iloc[1]))
print(df.where(df['A'] == True))
True
A
0 NaN
1 <__main__.Test object at 0x000002A701897520>
在pandas中,是否可以构造一个使用自定义对象进行索引的布尔系列?
即
class Test():
def __init__(self, num):
self.num = num
def __bool__(self):
return self.num == 3
x = Test(2)
y = Test(3)
df = pd.DataFrame({'A':[x,y]})
print(bool(df['A'].iloc[1]))
print(df.where(df['A'] == True))
returns
True
A
0 NaN
1 NaN
我想要的是
True
A
0 False
1 True
或类似的,以便我可以使用 .first_valid_index() 来获取不同函数中的第一次出现。
有什么方法可以检查对象的“真实性”以构建新系列吗?
不要使用 ==
。 map
bool
改为
df.where(df['A'].map(bool))
A
0 NaN
1 <__main__.Test object at 0x000002A70187E6D0>
或astype(bool)
df.where(df.astype(bool))
A
0 NaN
1 <__main__.Test object at 0x000002A70187E6D0>
但是,如果您定义 __eq__
class Test():
def __init__(self, num):
self.num = num
def __bool__(self):
return self.num == 3
def __eq__(self, other):
if isinstance(other, type(self)):
return bool(other) == bool(self)
else:
try:
return type(other)(self) == other
except:
return False
x = Test(2)
y = Test(3)
df = pd.DataFrame({'A':[x,y]})
print(bool(df['A'].iloc[1]))
print(df.where(df['A'] == True))
True
A
0 NaN
1 <__main__.Test object at 0x000002A701897520>