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

标签 python python-3.x pandas csv jupyter-notebook

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

CSV 文件是这样的: csv file

我编写了下面的代码,但它返回 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。

最佳答案

用途:

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

然后检查缺失值 NoneNaN:

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

检查每行是否全部为 True DataFrame.all :

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

最后一次计数仅通过sum得出True

关于Python:如何使用列表检查 csv 列中是否没有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54217536/

相关文章:

python - 按复杂标准合并/加入 2 个 DataFrame

python - Dask agg函数 pickle 错误

python - 无法处理一些关键的链接

python-3.x - Google Cloud Console - Flask - main.py vs 包

python - 如何使类对象可迭代

python - Pandas map lambda 函数的不区分大小写的字典

python-3.x - 如何根据 Python 中另一列中的日期查找最频繁的值

python - ReportLab 表格布局

python - Django 模板的可视化编辑器?

python - Pandas 将重复行复制为唯一行