如何断言根据条件过滤的熊猫数据框为真

时间:2018-10-18 05:13:04

标签: python pandas pytest

所以我有一个pytest测试返回熊猫数据框的查询结果。

我想断言特定的列col具有作为给定输入的子字符串的所有值。

因此,以下内容为我提供了具有该列的col值(包含一些输入部分)的行(数据框)。我怎么能断言是真的?

assert result_df[result_df['col'].astype(str).str.contains(category)].bool == True 

不起作用

3 个答案:

答案 0 :(得分:1)

我相信您需要Series.all来检查是否所有过滤后的Series的值都是True

assert result_df['col'].astype(str).str.contains(category).all()

示例

result_df = pd.DataFrame({
         'col':list('aaabbb')
})

print (result_df)
  col
0   a
1   a
2   a
3   b
4   b
5   b

category = 'b'
assert result_df['col'].astype(str).str.contains(category).all()
  

AssertionError

详细信息

print (result_df['col'].astype(str).str.contains(category))
0    False
1    False
2    False
3     True
4     True
5     True
Name: col, dtype: bool

print (result_df['col'].astype(str).str.contains(category).all())
False

category = 'a|b'
assert result_df['col'].astype(str).str.contains(category).all()

print (result_df['col'].astype(str).str.contains(category))

0    True
1    True
2    True
3    True
4    True
5    True
Name: col, dtype: bool

print (result_df['col'].astype(str).str.contains(category).all())
True

答案 1 :(得分:1)

尝试一下:

assert result_df[result_df['col'].astype(str).str.contains(category)].bool.all(axis=None) == True

有关更多信息,请参阅熊猫文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.all.html

您的代码不起作用的原因是,您试图测试数据框对象是否为True,而不是其中的所有值。

答案 2 :(得分:0)

找到了。 assert result_df[result_df['col'].astype(str).str.contains(category)].bool有效

assert result_df['col'].astype(str).str.contains(category).all(感谢@jezrael提出了所有建议)