我正在使用熊猫库来读取一些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