piR*_*red 6 python dataframe pandas
考虑数据帧 df
df = pd.DataFrame({
1: [1, 2],
2: ['a', 3],
3: [None, 7]
})
df
1 2 3
0 1 a NaN
1 2 3 7.0
Run Code Online (Sandbox Code Playgroud)
当我与一个字符串比较
df == 'a'
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)TypeError: Could not compare ['a'] with block values
但是,采用转置修复了问题?!
(df.T == 'a').T
1 2 3
0 False True False
1 False False False
Run Code Online (Sandbox Code Playgroud)
这个错误是什么?这是我可以解决的问题,我是如何构建我的数据帧的?与转置相比有什么不同?
创建数据框时,声明dtype=object:
In [1013]: df = pd.DataFrame({
...: 1: [1, 2],
...: 2: ['a', 3],
...: 3: [None, 7]
...: }, dtype=object)
In [1014]: df
Out[1014]:
1 2 3
0 1 a None
1 2 3 7
Run Code Online (Sandbox Code Playgroud)
现在,您可以在不转置的情况下进行比较:
In [1015]: df == 'a'
Out[1015]:
1 2 3
0 False True False
1 False False False
Run Code Online (Sandbox Code Playgroud)
我的信念是,首先,您的列不是对象(它们在可能的情况下被强制),但由于混合值,换位会强制进行更改。
在源代码中发现了这个pandas/internals.py:
if not isinstance(result, np.ndarray):
# differentiate between an invalid ndarray-ndarray comparison
# and an invalid type comparison
...
raise TypeError('Could not compare [%s] with block values' %
repr(other))
Run Code Online (Sandbox Code Playgroud)
如果正在比较的项目与数组的数据类型不匹配,则会抛出此错误。