让 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 的形式读取空单元格。

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

171984 次浏览

我在这里添加了一个选项:

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

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

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

看完其他的回答和评论后,我仍然感到困惑。但是现在的答案似乎更简单,所以,给你。

自从 Panda 0.9版(从2012年开始)以来,你可以通过简单地设置 keep_default_na=False来使用空单元格读取你的 csv 文件,这些空单元格被解释为空字符串:

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

这个问题在

这是在2012年8月19日为熊猫0.9版本

我们在《熊猫 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})