如何检查数据框中的所有值是否为True

时间:2018-03-26 18:42:04

标签: python pandas

{ "data": { "aString": "some string", "anInt": 57, "aFloat": 1.23, } } pd.DataFrame.all将所有值转换为pd.DataFrame.any,并使用关键字bool声明所有身份。只要我们对非空列表和字符串计算为True的事实很好,这是可以的。但是,假设情况并非如此。

True

解决方法是断言与>>> pd.DataFrame([True, 'a']).all().item() True # Wrong 的平等,但与True的比较听起来并不像pythonic。

True

问题:我们可以在不使用>>> (pd.DataFrame([True, 'a']) == True).all().item() False # Right

的情况下与True断言身份

2 个答案:

答案 0 :(得分:6)

首先,我不建议这个。请不要在数据框列中使用混合dtypes - 这会破坏数据帧的用途,它们不比列表更有用,也不会比循环更有效。

现在,针对您的实际问题 spolier alert ,您无法克服==。但您可以使用eq功能隐藏它。你可以使用

df.eq(True).all()

或者,

df.where(df.eq(True), False).all()

请注意

df.where(df.eq(True), False)

       0
0   True
1  False

如果您因任何其他原因想要将非“True”值转换为False,您可能会觉得有用。

答案 1 :(得分:3)

我实际上会使用

(pd.DataFrame([True, 'a']) == True).all().item()

通过这种方式,您可以检查对象的价值,而不只是检查" truthy-ness"它的。

这对我来说似乎是完美的pythonic,因为你明确地检查对象的价值,而不仅仅是它是否是一个真正的价值。