Вопрос по python – Получите pandas.read_csv для чтения пустых значений в виде пустой строки вместо nan

47

Я использую библиотеку панд для чтения некоторых данных CSV. По моим данным, некоторые столбцы содержат строки. Струна"nan" - возможное значение, так же как и пустая строка. Мне удалось заставить панд читать «nan» как строку, но я не могу понять, как заставить его не читать пустое значение как NaN. Вот пример данных и вывод

One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven

>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
    One  Two  Three
0    a    1    one
1    b    2    two
2  NaN    3  three
3    d    4    nan
4    e    5   five
5  nan    6    NaN
6    g    7  seven

Он правильно читает «nan» как строку «nan», но все еще читает пустые ячейки как NaN. Я попытался передатьstr вconverters аргумент для read_csv (сconverters={'One': str})), но он все еще читает пустые ячейки как NaN.

Я понимаю, что могу заполнить значения после чтения с помощью fillna, но разве нет никакого способа сказать пандам, что пустая ячейка в определенном столбце CSV должна читаться как пустая строка вместо NaN?

Ваш Ответ

2   ответа
32

https://github.com/pydata/pandas/issues/1450

В это время,result.fillna('') должен делать то, что вы хотите

РЕДАКТИРОВАТЬ: в версии для разработки (будет финальной версии 0.8.0), если вы укажете пустой списокna_valuesпустые строки останутся пустыми строками в результате

@delgadom Спасибо, что привели меня кkeep_default_na, Но обратите внимание, что он не хочет "нанить". будет рассматриваться как значение по умолчанию либо. Я добавил более полное объяснение в качестве нового ответа.
Documentation for DataFrame.fillna. Пытатьсяresult.fillna('', inplace=True), В противном случае он создает копию кадра данных.
Documentation для read_csv теперь предлагает обаna_values (список или слова, проиндексированные по столбцам) иkeep_default_na (BOOL).keep_default_na значение указывает, являются ли панды & apos; значения NA по умолчанию должны быть заменены или добавлены. Код OP в настоящее время не работает только потому, что в нем отсутствует этот флаг. Для этого примера вы можете использоватьpandas.read_csv('test.csv',na_values=['nan'], keep_default_na=False).
извините, что воскресил такой старый ответ, но случалось ли это когда-нибудь? Насколько я могу судить поthis GitHub PR он был закрыт без слияния, и я не вижу запрашиваемого поведения в версии 0.14.x для панд.
43

ответ теперь кажется более простым, так что здесь вы идете.

Начиная с версии Pandas 0.9 (с 2012 года), вы можете прочитать свой CSV с пустыми ячейками, интерпретируемыми как пустые строки, просто установивkeep_default_na=False:

pd.read_csv('test.csv', keep_default_na=False)

Эта проблема более четко объяснена в

More consistent na_values handling in read_csv · Issue #1657 · pandas-dev/pandas

Это было исправлено 19 августа 2012 года для Pandas версии 0.9 в

BUG: more consistent na_values #1657 · pandas-dev/[email protected]

Похожие вопросы