Я использую библиотеку pandas для чтения некоторых данных CSV. В моих данных некоторые столбцы содержат строки. Строка "nan"
является возможным значением, как и пустая строка. Мне удалось заставить pandas читать «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. Я попытался переходящим в str
в converters
аргументе read_csv (с converters={'One': str})
), но он все еще читает пустые ячейки как NaN.
Я понимаю, что могу заполнить значения после прочтения с помощью fillna, но действительно ли нет способа сказать пандам, что пустая ячейка в конкретном столбце CSV должна читаться как пустая строка вместо NaN?
keep_default_na
ниже.Ответы:
Я добавил билет, чтобы добавить здесь какую-то опцию:
https://github.com/pydata/pandas/issues/1450
А пока
result.fillna('')
делай что хочешьРЕДАКТИРОВАТЬ: в разрабатываемой версии (будет 0.8.0 final), если вы укажете пустой список
na_values
, пустые строки останутся пустыми в результатеисточник
DataFrame.fillna
. Попробуйresult.fillna('', inplace=True)
. В противном случае он создает копию фрейма данных.na_values
(список или dict, индексированный по столбцам), так иkeep_default_na
(bool).keep_default_na
Значение указывает значения NA панд по умолчанию должны быть заменены или добавлены к. Код OP в настоящее время не работает только потому, что отсутствует этот флаг. В этом примере вы можете использоватьpandas.read_csv('test.csv',na_values=['nan'], keep_default_na=False)
.keep_default_na
. Но обратите внимание, что он также не хочет, чтобы «nan» использовалось по умолчанию. Я добавил более полное объяснение в качестве нового ответа.keep_default_na=False
), но поведение pandas по умолчанию в этом случае является плохим IMO. если по какой-то причине pandas read_csv делает вывод, что столбец не является числовым, он не должен автоматически изменять пустые строки на NaN.Я все еще был сбит с толку после прочтения других ответов и комментариев. Но теперь ответ кажется более простым, так что готово.
Начиная с версии Pandas 0.9 (с 2012 г.), вы можете читать свой csv с пустыми ячейками, интерпретируемыми как пустые строки, просто установив
keep_default_na=False
:pd.read_csv('test.csv', keep_default_na=False)
Этот вопрос более подробно объясняется в
Это было исправлено 19 августа 2012 г. для Pandas версии 0.9 в
источник
В Pandas read_csv для этого есть простой аргумент:
Использование:
df = pd.read_csv('test.csv', na_filter= False)
Документация Pandas четко объясняет, как работает приведенный выше аргумент.
Ссылка на сайт
источник
na_values
для распознавания "nan", но полноеna_filter
отключение этого не сделает. Таким образом, мой ответ сkeep_default_na=False
.