2017-02-02 8 views
2

Как часть упражнения профилирования данных, я читаю листы excel в dataframes панд.pandas redefine isnull игнорировать 'NA'

df = pd.ExcelFile('file.xlsx').parse(0) 
nullcounts = df.isnull().sum().to_frame('null_records') 

Производит хороший кадр с нулевым числом для каждой серии в моей информационной кадре. Но если строка «NA» появляется в строке данных, я не хочу, чтобы операция isnull возвращала True.

Есть ли простой способ сделать это без жесткого кодирования правила для определенного столбца/dataframe?

Редактировать: Похоже, что NA в моих исходных данных игнорируются при чтении в pandas, поскольку, когда я загружаю данные и сравниваю визуально, я вижу NaN, где в excel было NA.

+0

строка «NA» не будет возвращать 'true' для нулевого тестирования, как вы знаете, это вы можете опубликовать некоторые необработанные данные и код, который воспроизводит эту – EdChum

+0

. Хорошая точка, вопрос, отредактированный выше – joshi123

ответ

3

Если использование read_excel можно определить, какие значения преобразуются в NaN с параметром keep_default_na и na_values:

df = pd.read_excel('file.xlsx') 
print (df) 
    a b 
0 NaN NaN 
1 3.0 6.0 

nullcounts = df.isnull().sum().to_frame('null_records') 
print (nullcounts) 
    null_records 
a    1 
b    1 

df = pd.read_excel('file.xlsx',keep_default_na=False,na_values=['NaN']) 
print (df) 
    a b 
0 NA NaN 
1 3 6.0 

nullcounts = df.isnull().sum().to_frame('null_records') 
print (nullcounts) 
    null_records 
a    0 
b    1 
+0

, строка 'NA' не должна возвращать 'True' для' isnull', null-ness применяется только к числовым типам, попробуйте с помощью string 'NA' – EdChum

+0

уверен, поэтому я использую замену. – jezrael

+0

Но разве OP не утверждает, что они думают, что «NA» возвращается True, хотя для 'isnull'? Вот почему я попросил воспроизводимый пример – EdChum