Python: как проверить, нет ли значения в столбце csv, используя список - PullRequest
0 голосов
/ 16 января 2019

У меня есть файл 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.

1 Ответ

0 голосов
/ 16 января 2019

Использование:

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

Sample

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:

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

И только последний счет True с sum.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...