Запретить Pandas read_csv интерпретировать NA как NaN, но сохранить NaN для пустых значений - PullRequest
1 голос
/ 23 октября 2019

Мой вопрос связан с этим один . У меня есть файл с именем «test.csv» с «NA» в качестве значения для region. Я хочу прочитать это как «NA», а не «NaN». Однако в test.csv отсутствуют значения в других столбцах, которые я хочу сохранить как «NaN». Как я могу это сделать?

# test.csv looks like this:

enter image description here

Вот что я пробовал:

import pandas as pd
# This reads NA as NaN
df = pd.read_csv(test.csv)
df
    region  date    expenses
0   NaN   1/1/2019  53
1   EU    1/2/2019  NaN

# This reads NA as NA, but doesn't read missing expense as NaN
df = pd.read_csv('test.csv', keep_default_na=False, na_values='_')
df
    region  date    expenses
0   NA    1/1/2019  53
1   EU    1/2/2019  

# What I want:
    region  date    expenses
0   NA    1/1/2019  53
1   EU    1/2/2019  NaN

Проблема с добавлением аргумента keep_default_na=Falseчто второе значение для expenses не читается как NaN. Поэтому, если я тогда попробую pd.isnull(df['value'][1]), это будет возвращено как False.

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Для меня это работает:

df = pd.read_csv('file.csv', keep_default_na=False, na_values=[''])

, что дает:

  region      date  expenses
0     NA  1/1/2019      53.0
1     EU  1/2/2019       NaN

Но я бы предпочел играть безопасно, поскольку возможны другие NaN в других столбцах, иделать

df = pd.read_csv('file.csv')
df['region'] = df['region'].fillna('NA')
0 голосов
/ 23 октября 2019

при указании keep_default=False все значения по умолчанию не рассматриваются как нан, поэтому вы должны указать их:

использовать keep_default_na=False, na_values= [‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’]

...