заменить все выбранные значения как NaN в пандах

1

У меня есть 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, и значения не заменяются. Нужна помощь.

Заранее спасибо. :)

Теги:
pandas

2 ответа

3
Лучший ответ

Используйте квадратные скобки для замены списка вместо скобок и опускайте .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
  • 0
    Brilliant. Большое спасибо..!! :) Бог благословил..!!
  • 0
    Было бы очень интересно узнать, что пошло не так. :)
Показать ещё 2 комментария
4

Если вы читаете это из файла 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'],
    ...
)
  • 0
    Большое спасибо..!! Это, безусловно, поможет. Прямо сейчас я читал из Excel. Еще раз спасибо.
  • 2
    read_excel также имеет аргумент na_values
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню