检查Python DataFram中是否有任何值为0

2024-03-28 19:13:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些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   
...

我的代码看起来像:

^{pr2}$

这只显示错误(即使是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。测试最少一个“0”(因为它们只包含0)

我的错误是什么?在


Tags: 文件csvtesttime错误threefivetwo
1条回答
网友
1楼 · 发布于 2024-03-28 19:13:34

如果我理解正确的话,问题语句是根据每个数据帧的Test系列中是否存在0,为列表中的每个数据帧返回一个值。在

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

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

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

^{pr2}$

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

注意,我们使用的是向量化操作,而不是一次迭代一个序列中的每个元素。这是Pandas的一个特性,它与您一直尝试的标准Python列表理解或生成器表达式方法相分离。矢量化操作提供了对连续内存块的有效访问,应尽可能优先使用。在

相关问题 更多 >