是否可以将 CSV 读入为 pandas DataFrame 并在一行中将空格(或空单元格)设置为 0?下面是该问题的说明。输入:$ csvlook data.csv |------+---+------|...
是否可以将 CSV 读入为 pandas DataFrame 并在一行中将空格(或空单元格)设置为 0?下面是该问题的说明。
输入:
$ csvlook data.csv
|------+---+------|
| a | b | c |
|------+---+------|
| | a | 0.0 |
| 0 | b | 1.0 |
| 1.5 | c | 2.5 |
| 2.1 | d | 3.0 |
|------+---+------|
我想要的是:
python% print(df)
a b c
0 0 a 0.0
1 0 b 1.0
2 1.5 c 2.5
3 2.1 d 3.0
我尝试过的:
df = pd.read_csv('data.csv', dtype={'a': float, 'b': str, 'c': float})
由于第 0 行 a 列的空格,因此会引发 ValueError:
ValueError: could not convert string to float:
使用 pandas 读取 CSV 时,有没有办法用 0 替换字符串?
生成测试数据的代码:
如果您想尝试一下,下面是我在上面的示例中用来生成测试数据的代码行:
import pandas as pd
df = pd.DataFrame({'a':[' ', 0, 1.5, 2.1], 'b':['a', 'b', 'c', 'd'], 'c': [0, 1, 2.5, 3]})
df.to_csv('data.csv', index=False)
Pandas 会自动用 NaN 读取空值,因此只需用 fillna 方法填充它们,设置所需的新值(在本例中为 0)。
import pandas as pd
df = pd.read_csv('data.csv').fillna(value = 0)
得出的结果是:
a b c
0 0.0 a 0.0
1 0.0 b 1.0
2 1.5 c 2.5
3 2.1 d 3.0
您还可以通过传递字典为每一列设置不同的值。假设我们有以下 csv 文件:
a b c
0 NaN a 0.0
1 0.0 b 1.0
2 1.5 NaN 2.5
3 2.1 d NaN
如果我们希望它与以前相同,我们应该这样做:
pd.read_csv('data.csv').fillna(value = {'a':0,'b':'c','c':3})
再次屈服:
a b c
0 0.0 a 0.0
1 0.0 b 1.0
2 1.5 c 2.5
3 2.1 d 3.0