Python:如何使用列表检查 csv 列中是不是没有值

Posted

技术标签:

【中文标题】Python:如何使用列表检查 csv 列中是不是没有值【英文标题】:Python: How to check if there is no value in a csv column using a listPython:如何使用列表检查 csv 列中是否没有值 【发布时间】:2019-06-10 13:37:21 【问题描述】:

我有一个 CSV 文件,我想检查每一行是否在我在列表中指定的不同列中有一个或多个值。如果任何列中没有值,它应该加到一个计数器中,这样我就知道有多少行是空的。但如果它在列表中的一列中有一个值,则它不应该做任何事情。

CSV 文件是这样的:

我编写了下面的代码,但它返回不正确的 0。

import pandas as pd

testfile = 'test1.csv'

df = pd.read_csv(testfile)

column_names = ['Uniprot_acc',
'Uniprot_id',
'Interpro_domain',
'Ensembl_geneid',
'Ensembl_transcriptid',
'SIFT_score',
'SIFT_pred']

counter = 0

for row in df:
    for column_name in column_names:
        if column_name in row:
            if column_name == None:
                counter =+ 1

print(counter)

我想知道有多少行不包含任何内容。如果没有值,它应该检查列表中每一列的每一行。如果该行中确实没有任何内容,则应该计算在内。所以在这个例子中它应该是 3。

【问题讨论】:

【参考方案1】:

用途:

counter = df[column_names].isnull().all(axis=1).sum()
print (counter)

示例

df = pd.DataFrame(
         'A':list('abcdef'),
         'Uniprot_acc':[np.nan,5,4,5,np.nan,4],
         'Uniprot_id':[np.nan,8,9,4,np.nan,np.nan],
         'Interpro_domain':[np.nan,3,np.nan,7,np.nan,0],
         'E':[5,3,np.nan,9,np.nan,4],

)

column_names = ['Uniprot_acc',
                'Uniprot_id',
                'Interpro_domain']

print (df)
   A  Uniprot_acc  Uniprot_id  Interpro_domain    E
0  a          NaN         NaN              NaN  5.0
1  b          5.0         8.0              3.0  3.0
2  c          4.0         9.0              NaN  NaN
3  d          5.0         4.0              7.0  9.0
4  e          NaN         NaN              NaN  NaN
5  f          4.0         NaN              0.0  4.0

counter = df[column_names].isnull().all(axis=1).sum()
print (counter)
2

解释

首先按列表过滤列:

print (df[column_names])
   Uniprot_acc  Uniprot_id  Interpro_domain
0          NaN         NaN              NaN
1          5.0         8.0              3.0
2          4.0         9.0              NaN
3          5.0         4.0              7.0
4          NaN         NaN              NaN
5          4.0         NaN              0.0

然后检查缺失值NoneNaNs:

print (df[column_names].isnull())
   Uniprot_acc  Uniprot_id  Interpro_domain
0         True        True             True
1        False       False            False
2        False       False             True
3        False       False            False
4         True        True             True
5        False        True            False

通过DataFrame.all检查每行是否所有True:

print (df[column_names].isnull().all(axis=1))
0     True
1    False
2    False
3    False
4     True
5    False
dtype: bool

最后只计算Trues by sum

【讨论】:

它如何检查我列表中的每一列?

以上是关于Python:如何使用列表检查 csv 列中是不是没有值的主要内容,如果未能解决你的问题,请参考以下文章

CSV:如何在列表中找到下一个更大的值(python)?

在 python 的 2 列 CSV 文件中写入 2 个列表

如何使用python pandas删除csv中列中的精确重复项

Pandas - 检查列表列中的字符串列是不是按行排列

检查给定列表中的元素是不是存在于 DataFrame 的数组列中

循环遍历过滤的单元格列表以检查值是不是出现在另一列中,然后复制/粘贴