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
然后检查缺失值None
和NaN
s:
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
最后只计算True
s by sum
。
【讨论】:
它如何检查我列表中的每一列?以上是关于Python:如何使用列表检查 csv 列中是不是没有值的主要内容,如果未能解决你的问题,请参考以下文章
在 python 的 2 列 CSV 文件中写入 2 个列表
如何使用python pandas删除csv中列中的精确重复项