不一致的行为数据帧
问题描述:
我有两个dataframes df1
,df2
如下不一致的行为数据帧
>>> df1 = pd.DataFrame([[1,2],[3,4],[5,6],[7,8]])
>>> df2 = pd.DataFrame([1,2,3,4,5,6,7,8])
>>> df1
0 1
0 1 2
1 3 4
2 5 6
3 7 8
>>> df2
0
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
当试图检查是否1
是df1
,它产生真正符合市场预期。
>>> any(df1 == 1)
True
然而,试图在df2
相同的时候,我得到的,出乎意料的是,False
>>> any(df2 == 1)
False
尽管从布尔角度一切似乎是正确的。
>>> df1 == 1
0 1
0 True False
1 False False
2 False False
3 False False
>>> df2 == 1
0
0 True
1 False
2 False
3 False
4 False
5 False
6 False
7 False
>>>
任何想法是为什么?
PS:我不是在问大熊猫的任何功能。我对任何的行为感到困惑。
答
需要使用内置any
代替any
大熊猫从基部的Python:
df1.eq(1).any().any()
# True
df2.eq(1).any().any()
# True
当使用从蟒any
,它把该数据帧作为可迭代/字典,从而只检查列名称,而不查看数据框的值;如果你只是通过df1
和df2
循环,你可以看到它只返回列名,这是字典的行为方式;由于df1
包含0
和1
的列名,因此any([0,1])
将返回True
;另一方面,df2
仅包含[0]
的一列,any([0])
返回False
。所以any(df == 1)
是有点相当于any(df)
或any(df.columns)
:
[x for x in df1]
# [0, 1]
[x for x in df2]
# [0]
答
在大熊猫更好地使用DataFrame.any
。
numpy的解决方案:
print ((df1 == 1).values.any())
True
print ((df2 == 1).values.any())
True
+0
upvoting为推荐使用本机功能 – MedAli
我认为最好是利用熊猫功能'打印((DF2 == 1).ANY())''0真 D型:bool' – jezrael
@jezrael感谢您回应。我知道任何熊猫,我只是对任何行为感到困惑!你能帮助澄清含糊不清吗? – MedAli
难题,也许是bug(或尚未实现)。我不知道。 – jezrael