Pandas将CSV列读入为浮点数并将空单元格设置为0。

3

能否一行代码将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)
3个回答

8
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

2

这几乎是一行代码,但在实际情况下可能无法正常工作。

您可以在read_csv中将缺失值映射为NaN。

import pandas as pd
df = pd.read_csv('data.csv', na_values=" ")

yielding

     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

然后,您可以运行 fillna 来将 NaN 更改为 .0

因此,以下一行代码即可完成:

df = pd.read_csv('data.csv', na_values=" ").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

0
df.replace(r'\s+', 0, regex=True)

     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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接