我写(复制)了一个代码
iowa_file_data = pd.read_csv(iowa_train_prices_file_path)
#dtypes is a Series
s = (iowa_file_data.dtypes == 'object')
我得到iowa_file_data
是dataframe
类型,dtypes
是Series
类型。但是s
是如何变成Series
的呢?(iowa_file_data.dtypes == 'object')
的输出是否等于Series
?
Pandas(以及底层numpy)使用__eq__
操作符的特殊重载。目标是numpy数组、数据帧或序列之间的大多数操作仍然返回相同类型的对象。当操作符的一侧有一个级数,另一侧有一个标量时,标量在缺失的维度上被广播,以构建与初始级数具有相同大小(和索引)的级数,其中所有单元格都具有标量的值(和类型)。
所以是的,如果ser
是Series
,那么ser == 'object'
也是Series
,其大小和索引与ser
相同。
pandas使用array-broadcasting
类似于numpy…因此,操作是对每个元素而不是对象本身执行的。(参见https://stackoverflow.com/a/29955358/9703451)
你想用你的查询完成什么?
可能重载了__eq__
操作符
请看下面的例子
class A:
def __eq__(self, o: object) -> bool:
if isinstance(o, str):
return 13
return super().__eq__(o)
a = A()
# returns False
print(a == 2)
# returns 13 because of overriden __eq__ in A class
print(a == 's')
更多信息:Python文档。