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

l0oc07j2  于 2023-03-05  发布在  其他
关注(0)|答案(6)|浏览(251)

我正在使用panda库读入一些CSV数据。在我的数据中,某些列包含字符串。字符串"nan"是一个可能的值,也是一个空字符串。我设法让panda将“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。我尝试在read_csv的converters参数中传入str(使用converters={'One': str})),但它仍将空单元格读取为NaN。
我意识到我可以在阅读后用fillna填充值,但是真的没有办法告诉Pandas,特定CSV列中的空单元格应该读作空字符串而不是NaN吗?

blmhpbnm

blmhpbnm1#

阅读了其他的答案和评论后,我还是很困惑。但是现在答案似乎更简单了,所以给你。
从Pandas 0.9版本(2012年起)开始,您可以通过设置keep_default_na=False来读取包含解释为空字符串的空单元格的csv:

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

此问题在中有更清楚的解释

这是固定在八月19,2012为Pandas版本0.9在

q1qsirdb

q1qsirdb2#

我添加了一个票证,以便在此处添加某种选项:
https://github.com/pydata/pandas/issues/1450
与此同时,result.fillna('')应该做您想做的事情
EDIT:在开发版本(最终版本为0.8.0)中,如果指定na_values的空列表,则空字符串将在结果中保持为空字符串

wh6knrhe

wh6knrhe3#

我们在Pandas read_csv()中对此有一个简单的论证:
use:

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

wqnecbli4#

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)
qlvxas9a

qlvxas9a5#

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

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

vyswwuz26#

pd.read_csv( sourceObj, dtype='string')
不需要额外的参数。
每个列类型都是python基元字符串,空值变成空字符串“”。
版本:Pandasv1.5

相关问题