为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUH函数 2021-10-12 15:49:35
我有一个 CSV 文件,我想检查每一行是否在我在列表中指定的不同列中有一个或多个值。如果任何列中都没有值,它应该加起来为一个计数器,这样我就知道有多少行是空的。但是如果它在列表的一列中有一个值,它就不应该做任何事情。CSV 文件是这样的:我做了下面的代码,但它返回 0,这是不正确的。import pandas as pdtestfile = 'test1.csv'df = pd.read_csv(testfile)column_names = ['Uniprot_acc','Uniprot_id','Interpro_domain','Ensembl_geneid','Ensembl_transcriptid','SIFT_score','SIFT_pred']counter = 0for row in df:    for column_name in column_names:        if column_name in row:            if column_name == None:                counter =+ 1print(counter)我想知道的是有多少行不包含任何内容。如果没有值,它应该检查列表中每一列的每一行。如果行中确实没有任何内容,它应该算数。所以在这个例子中它应该是 3。
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

用:


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

然后检查缺失值None和NaNs:


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:


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。


查看完整回答
反对 回复 2021-10-12
  • 1 回答
  • 0 关注
  • 443 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号