我正在使用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吗?
答案 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文档清楚地解释了上述论点的工作原理。
答案 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)