У меня есть df, который выглядит так:
test1 test2 test3 test_Date test5
285685 0000105 0 2016-11-25 00:00:00
285685 0000106 0 2016-11-25 00:00:00
285685 0000107 1 2016-11-25 00:00:00
Null NULL #N/A #DIV/0!
Я пытаюсь заполнить что-то вроде этого:
test1 test2 test3 test_Date test5
285685 0000105 NaN 2016-11-25 00:00:00 NaN
285685 0000106 NaN 2016-11-25 00:00:00 NaN
285685 0000107 1 2016-11-25 00:00:00 NaN
NaN NaN NaN NaN NaN NaN
В основном пытается заменить 0, 'NA', 'NULL', '# DIV/0!', '#VALUE', 'NaN', '# N/A', '# REF!', '(Space)', '0', 'Null' все для NaN
Используя приведенный ниже код, я не могу это сделать:
f = dataframe.replace((0,'NA','NULL','#DIV/0!',' #VALUE','NaN','#N/A','#REF!',' ','0','Null'), np.nan).apply(lambda x: any(~x.isnull()))
dataframe.loc[:,f]
Я получаю следующий результат:
test1 test2 test3 test_Date
285685 0000105 0.0 2016-11-25
285685 0000106 0.0 2016-11-25
285685 0000107 1.0 2016-11-25
Null NaN NaN NaT
Я теряю один столбец, а также test5, и значения не заменяются. Нужна помощь.
Заранее спасибо. :)
Используйте квадратные скобки для замены списка вместо скобок и опускайте .apply
в конце:
>>> df
test1 test2 test3 test_Date test5
0 285685 105.0 0.0 2016-11-25 00:00:00
1 285685 106.0 0.0 2016-11-25 00:00:00
2 285685 107.0 1.0 2016-11-25 00:00:00
3 Null NaN NaN #DIV/0!
>>> df.replace([0,'NA','NULL','#DIV/0!',' #VALUE','NaN','#N/A','#REF!',' ','0','Null'], np.nan)
test1 test2 test3 test_Date test5
0 285685 105.0 NaN 2016-11-25 00:00:00 NaN
1 285685 106.0 NaN 2016-11-25 00:00:00 NaN
2 285685 107.0 1.0 2016-11-25 00:00:00 NaN
3 NaN NaN NaN NaN NaN
Если вы читаете это из файла csv, используйте аргумент na_values
. См. Документацию: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html.
read_csv(
...,
na_values=[0,'NA','NULL','#DIV/0!',' #VALUE','NaN','#N/A','#REF!',' ','0','Null'],
...
)