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

时间:2012-06-03 00:38:38

标签: python csv pandas

我正在使用pandas库来读取一些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(使用{{1} }),但它仍然将空单元格读为NaN。

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

4 个答案:

答案 0 :(得分:45)

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

自Pandas 0.9版(2012年起)以来,只需设置keep_default_na=False即可读取空单元格被解释为空字符串的csv:

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

中更清楚地解释了这个问题

2012年8月19日修正了Pandas 0.9版

答案 1 :(得分:35)

我添加了一张票,在这里添加某种选项:

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

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

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

答案 2 :(得分:1)

我们在Pandas read_csv中有一个简单的论点:

使用:

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

Pandas文档清楚地解释了上述论点的工作原理。

Link

答案 3 :(得分:0)

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, a_values=default_missing)