所以我有一个pytest测试返回熊猫数据框的查询结果。
我想断言特定的列col
具有作为给定输入的子字符串的所有值。
因此,以下内容为我提供了具有该列的col
值(包含一些输入部分)的行(数据框)。我怎么能断言是真的?
assert result_df[result_df['col'].astype(str).str.contains(category)].bool == True
不起作用
答案 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提出了所有建议)