python - 检查Python DataFrame中是否有任何值为0

标签 python pandas

我有一些 csv 文件,例如:

Time   Test Two Three Five Six Seven Eight Nine Ten Eleven Twelve Thirteen  Fifteen  Sixteen   
0       0   0    0    0   0     0    0     0   -0.3   0     0       100        0       0   
0.02    0   0    0    0   0     0    0     0  -0.1   0.05   0       99        28       0   
0.04    0   0    0    0   0     0    0     0  -0.15  0.05   0.9    99.6      28.7      0   
...

我的代码如下所示:

list_of_dfs = [pandas.read_csv(filename) for filename in filenames]
for i in list_of_dfs:
    if any(x is 0 for x in i.Test):
        print("true")
    else:
        print("false")

这仅显示错误(即使 i.Test 始终为 0)

print(list_of_dfs[0].Test)

显示

0      0
1      0
2      0
3      0
4      0
5      0
6      0
7      0
8      0
9      0
10     0
..
655    0
656    0
657    0
658    0
659    0
660    0
661    0
662    0
663    0
664    0
665    0
Name: Test, Length: 666, dtype: int64

不应该

any(x is 0 for x in i.Test) 

始终为真,因为我在每个 i.Test 中都至少有一个“0”(因为它们只包含 0)

我的错误是什么?

最佳答案

如果我理解正确的话,问题陈述是为列表中的每个数据帧返回一个值,具体取决于每个数据帧的Test系列中是否存在0。

仅打印 'true''false' 可能还不够,因为您必须将它们链接回数据帧列表。相反,我建议使用字典来存储数据帧:

dict_of_dfs = {fn: pd.read_csv(fn) for fn in filenames}

然后您可以根据您的条件使用字典理解将每个文件名映射到 bool 值:

res = {fn: (df['test'] == 0).any() for fn, df in dict_of_dfs.items()}

然后,您可以通过迭代 res.items() 或通过 res['myfile.csv' 指定特定文件名来确定哪些数据帧满足您的条件]

请注意,我们使用的是矢量化运算,而不是一次迭代一系列元素中的每个元素。这是 Pandas 的一个功能,并将其与您一直在尝试的标准 Python 列表理解或生成器表达式方法分开。矢量化操作可以有效地访问连续的内存块,因此应尽可能首选。

关于python - 检查Python DataFrame中是否有任何值为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50826140/

相关文章:

python - 如何根据列表从 Pandas 数据框中过滤子字符串?

Python Pandas - 创建包含节点对和边强度的 DataFrame

python - 将字符串/文本和 pandas 数据框写入 excel

python - 在 flask 上是否有效?

python - 分段故障?我没有看到任何错误...

python - 对行进行排序并删除 NaN 值

python - 如何获得 pandas 数据框中列表中每个元素的频率分布?

python - 无法在 python 中安装 zope.interface 3.6.1

c# - 将 c# 类型注入(inject) Ironpython

python - django-image-cropping 在管理界面中不起作用