Python 熊猫在csv列中读取为浮点,并将空单元格设置为0

Python 熊猫在csv列中读取为浮点,并将空单元格设置为0,python,pandas,Python,Pandas,是否可以将CSV作为数据帧读取,并在一行中将空格(或空单元格)设置为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)

是否可以将CSV作为数据帧读取,并在一行中将空格(或空单元格)设置为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})
我想要什么:

$ 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})
我所尝试的:

$ 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})
由于a列的第0行中存在空格,因此会显示ValueError:

ValueError: could not convert string to float: 
在使用pandas读取CSV时,是否有方法将字符串替换为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})
如果您想尝试一下,以下是我在上述示例中用于生成测试数据的行:

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)

几乎在一行中,在实际情况下可能不起作用

您可以在中设置要映射到NaN的缺失值

屈服

     a  b    c
0  NaN  a  0.0
1  0.0  b  1.0
2  1.5  c  2.5
3  2.1  d  3.0
然后,您可以运行将NaN更改为
.0

因此,下面这一行就完成了这一切:

df = pd.read_csv('data.csv', na_values=" ").fillna(0)
给予


Pandas将自动读取带有NaN的空值,因此从那里用fillna方法填充它们,设置所需的新值(在本例中为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
还可以通过传递dict为每列设置不同的值。 假设我们有以下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})
再次屈服: