字符串数据帧中的nans变换

2024-05-04 21:45:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我读了cvs文件。我的数据帧包含真正浮动的字符串。也有价值观
基本上我想把NaN转换成mean,把字符串转换成float
有一些方法可以提供帮助,比如fillna可以替换nan值,因为我无法得到平均值(因为值是字符串)
还有一个float()方法,但是如果它应用在NaN上,它会给出0,这对我来说不好
用平均值替换NaN值并将字符串转换为浮点值有什么好的决定吗
数据帧示例:

1   9,5  50,6  45,75962845  2,6  6,5   11  8,9  NaN  
2  10,5  59,9  74,44538987    0  4,5  8,9  NaN  NaN
3  20,1  37,7          NaN  0,8  2,5  9,7  6,7  4,2  
4  10,7  45,2   10,9710853  0,4  3,1  6,9  5,5  4,7    
5  13,2  39,9   9,23393302    0  5,8  9,2  7,4  4,3    

作为A。莱斯特拉提议我用

for col in df.columns:
    df[col] = pd.to_numeric(df[col], errors='coerce')
    df[col].fillna(df[col].mean())

to_numericerrors='coerce'创建了许多新的nanerrors='ignore'参数看起来不错,但在df[col].fillna(df[col].mean())行上给出了TypeError: Can't convert 'int' object to str implicitly

p.S.2正如piRSquared所建议的,我试图在read\csv函数中添加decimal=','。但它仍然给出相同的错误TypeError: Can't convert 'int' object to str implicitly


Tags: to数据方法字符串dfcolnanfloat
2条回答

如果使用pd.read_csv,则应该使用decimal=','参数读入数据。否则,如果您被这个数据框困住了,您可以将它转储到csv中,然后再试一次

pd.read_csv(pd.io.common.StringIO(df.to_csv(index=False)), decimal=',')

   0     1     2          3    4    5     6    7    8
0  1   9.5  50.6  45.759628  2.6  6.5  11.0  8.9  NaN
1  2  10.5  59.9  74.445390  0.0  4.5   8.9  NaN  NaN
2  3  20.1  37.7        NaN  0.8  2.5   9.7  6.7  4.2
3  4  10.7  45.2  10.971085  0.4  3.1   6.9  5.5  4.7
4  5  13.2  39.9   9.233933  0.0  5.8   9.2  7.4  4.3

填写缺失的数据变得很容易

d = pd.read_csv(pd.io.common.StringIO(df.to_csv(index=False)), decimal=',')
d.fillna(d.mean())

   0     1     2          3    4    5     6      7    8
0  1   9.5  50.6  45.759628  2.6  6.5  11.0  8.900  4.4
1  2  10.5  59.9  74.445390  0.0  4.5   8.9  7.125  4.4
2  3  20.1  37.7  35.102509  0.8  2.5   9.7  6.700  4.2
3  4  10.7  45.2  10.971085  0.4  3.1   6.9  5.500  4.7
4  5  13.2  39.9   9.233933  0.0  5.8   9.2  7.400  4.3

首先,需要使用to_numeric将字符串转换为浮点:

for col in df.columns:
   df[col] = pd.to_numeric(df[col], errors='coerce')

(使用“强制”将不可转换的值替换为NaN,这是您在这里想要的)。然后您就可以使用fillna

df.fillna(df.mean())

相关问题 更多 >