获取pandas.read_csv以将空值读取为空字符串而不是 nan



我正在使用熊猫库来读取一些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。 我尝试将converters参数中的str传递给read_csv(带有converters={'One': str})),但它仍然将空单元格读取为 NaN。

我意识到我可以在阅读后用 fillna 填充值,但是真的没有办法告诉熊猫特定 CSV 列中的空单元格应该被读取为空字符串而不是 NaN?

阅读其他答案和评论后,我仍然感到困惑。但是现在答案似乎更简单了,所以你来了。

从 Pandas 版本 0.9(从 2012 年开始)开始,您只需设置keep_default_na=False即可读取带有空单元格解释为空字符串的 csv:

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

这个问题在 中有更清楚的解释

  • na_values read_csv ·问题 #1657 ·熊猫-发展/熊猫

这在 2012 年 8 月 19 日为 Pandas 版本 0.9 修复

  • 错误:更一致 na_values #1657 · 熊猫开发/pandas@d9abf68

我添加了一个票证来添加某种选项:

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

与此同时,result.fillna('')应该做你想做的事

编辑:在开发版本(0.8.0最终版)中,如果您指定na_values的空列表,空字符串将在结果中保持空字符串

我们在Pandas read_csv()中有一个简单的论据:

用:

df = pd.read_csv('test.csv', na_filter= False)

pandas默认定义为缺失值的内容,而read_csv()可以在这里找到。

import pandas
default_missing = pandas._libs.parsers.STR_NA_VALUES
print(default_missing)

输出

{'', '<NA>', 'nan', '1.#QNAN', 'NA', 'null', 'n/a', '-nan', '1.#IND', '#N/A N/A', 'N/A', 'NULL', 'NaN', '-1.#IND', '-1.#QNAN', '#NA', '#N/A', '-NaN'}

有了它,您可以选择退出。

import pandas
default_missing = pandas._libs.parsers.STR_NA_VALUES
default_missing = default_missing.remove('')
default_missing = default_missing.remove('na')
with open('test.csv', 'r') as csv_file:
    pandas.read_csv(csv_file, na_values=default_missing)

如果只想保留一列的空字符串,请将str定义为列转换器(dtypes不起作用):

pd.read_csv('test.csv', converters={'column_name': str})

pd.read_csv( sourceObj, dtype='string')

无需其他参数。

每个列类型都是 python 原始字符串,空值变为空字符串 ''。

版本: 熊猫 v1.5

最新更新