简单示例:
df = pd.DataFrame({'x': ['a', 'b', 'c'], 'y': [1, 2, 3], 'z': ['d', 'e', 'f']})
df
x y z
0 a 1 d
1 b 2 e
2 c 3 f
df.dtypes
x object
y int64
z object
dtype: object
思路是过滤掉“object”类型的列。我知道可以使用“select_dtypes”来实现,但提出这个问题的动机是为了研究下面要展示的奇怪行为。
“==”(因此,“.eq”)用于比较特定类型。
df.dtypes == object
x True
y False
z True
dtype: bool
然而,
isin
并不具备以下功能:df.dtypes.isin([object])
df.dtypes.isin(['object'])
x False
y False
z False
dtype: bool
然而,创建一个np.dtype
对象并传递它确实可以实现。
df.dtypes.isin([np.dtype('O')])
x True
y False
z True
dtype: bool
np.isin
在这里能够正常工作,因此它没有任何不同的行为。
np.isin(df.dtypes, object)
array([ True, False, True])
np.isin(df.dtypes, 'object')
array([ True, False, True])
isin
在仅检查对象类型时似乎会出现问题。 df.dtypes.isin(['int'])
返回预期的结果。
顺便说一下,我在0.24上运行这些测试。
pd.__version__
'0.24.2'
这是一个bug还是预期行为?
'0.24.2'
版本中对我有效。 - G. Andersonisin[object]
仍然给出了意外的答案。 - Quang Hoangobject
数据类型上,很不幸。int
似乎可以工作。我写帖子时才意识到这一点。 - cs95