【问题标题】: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。

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 它如何检查我列表中的每一列?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2017-03-04
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多