Найдите пустую или NaN-запись в Pandas Dataframe
Я пытаюсь выполнить поиск через Pandas Dataframe, чтобы найти там, где у него отсутствует запись или запись NaN.
Вот кадр данных, с которым я работаю:
cl_id a c d e A1 A2 A3
0 1 -0.419279 0.843832 -0.530827 text76 1.537177 -0.271042
1 2 0.581566 2.257544 0.440485 dafN_6 0.144228 2.362259
2 3 -1.259333 1.074986 1.834653 system 1.100353
3 4 -1.279785 0.272977 0.197011 Fifty -0.031721 1.434273
4 5 0.578348 0.595515 0.553483 channel 0.640708 0.649132
5 6 -1.549588 -0.198588 0.373476 audio -0.508501
6 7 0.172863 1.874987 1.405923 Twenty NaN NaN
7 8 -0.149630 -0.502117 0.315323 file_max NaN NaN
ПРИМЕЧАНИЕ. Пустые записи - это пустые строки - это связано с тем, что в файле не было алфавитно-цифрового содержимого, из которого произошел фреймворк.
Если у меня есть этот фреймворк данных, как я могу найти список с индексами, в которых происходит NaN или пустая запись?
Ответы
Ответ 1
np.where(pd.isnull(df))
возвращает индексы строк и столбцов, где значение NaN:
In [152]: import numpy as np
In [153]: import pandas as pd
In [154]: np.where(pd.isnull(df))
Out[154]: (array([2, 5, 6, 6, 7, 7]), array([7, 7, 6, 7, 6, 7]))
In [155]: df.iloc[2,7]
Out[155]: nan
In [160]: [df.iloc[i,j] for i,j in zip(*np.where(pd.isnull(df)))]
Out[160]: [nan, nan, nan, nan, nan, nan]
Поиск значений, которые являются пустыми строками, может быть выполнено с помощью applymap:
In [182]: np.where(df.applymap(lambda x: x == ''))
Out[182]: (array([5]), array([7]))
Обратите внимание, что использование applymap
требует вызова функции Python один раз для каждой ячейки DataFrame. Это может быть медленным для большого DataFrame, поэтому было бы лучше, если бы вы могли организовать для всех пустых ячеек вместо NaN, чтобы вы могли использовать pd.isnull
.
Ответ 2
Попробуй это:
df[df['column_name'] == ''].index
а для NaNs вы можете попробовать:
pd.isna(df['column_name'])
Ответ 3
Частичное решение: для столбца с одной строкой
tmp = df['A1'].fillna(''); isEmpty = tmp==''
дает boolean Series True, где есть пустые строки или значения NaN.
Ответ 4
Я прибегал к
df[ (df[column_name].notnull()) & (df[column_name]!=u'') ].index
недавно. Это получает как пустые, так и пустые ячейки за один раз.
Ответ 5
Чтобы получить все строки, содержащие пустую ячейку в определенном столбце.
DF_new_row=DF_raw.loc[DF_raw['columnname']=='']
Это даст подмножество DF_raw, которое удовлетворяет условию проверки.