我正在使用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
Run Code Online (Sandbox Code Playgroud)
它正确地写着"男"为字符串"南",但仍读取空单元格作为NaN的.我想传递str的converters参数read_csv(带converters={'One': str})),但它仍然读取空单元格作为NaN的.
我知道读书,和fillna后,我可以填补值,但真的没有办法告诉大家,在一个特定的CSV列空单元格应该被解读为空字符串,而不是NaN的熊猫吗?
我有一个CSV文件.我希望读取的大部分值都是字符串,但如果具有给定标题的列存在,我想将列读为bool.
因为CSV文件有很多列,所以我不想直接在每列上指定数据类型,并给出如下内容:
data = read_csv('sample.csv', dtype={'A': str, 'B': str, ..., 'X': bool})
Run Code Online (Sandbox Code Playgroud)
是否可以在每列上定义字符串类型但是同时将可选列作为bool读取?
我目前的解决方案是以下(但它非常低效和缓慢):
data = read_csv('sample.csv', dtype=str) # reads all column as string
if 'X' in data.columns:
l = lambda row: True if row['X'] == 'True' else False if row['X'] == 'False' else None
data['X'] = data.apply(l, axis=1)
Run Code Online (Sandbox Code Playgroud)
更新:样本CSV:
A;B;C;X
a1;b1;c1;True
a2;b2;c2;False
a3;b3;c3;True
Run Code Online (Sandbox Code Playgroud)
或者同样可以没有'X'列(因为列是可选的):
A;B;C
a1;b1;c1
a2;b2;c2
a3;b3;c3
Run Code Online (Sandbox Code Playgroud)