无法在python中将字符串转换为float

时间:2017-09-20 12:34:07

标签: python pandas

我是Python的新手,请原谅我这个简单的问题。我正在尝试将字符串转换为浮点数。以下是数据样本:

0     10.65%
1      7.90%

当我尝试:

 df['int_rate'] = df['int_rate'].astype('float')

我明白了:

ValueError: could not convert string to float: '13.75%'

当我尝试:

df['int_rate'] = df['int_rate'].replace("%","", inplace=True) 

检查我的数据,我得到:

0     None
1     None

任何想法我做错了什么?非常感谢!

3 个答案:

答案 0 :(得分:5)

如您所猜,ValueError: could not convert string to float: '13.75%'表示%字符阻止了转换。

现在当你尝试删除它时:

df['int_rate'] = df['int_rate'].replace("%","", inplace=True) 

您在替换中设置了inplace=True,顾名思义就是更改了数据框,因此replace()方法调用会返回None。因此,您将None存储在df['int_rate']中,最后得到的列只包含None个值。 你应该这样做:

df['int_rate'] = df['int_rate'].replace("%","") 

df['int_rate'].replace("%","", inplace=True)

答案 1 :(得分:5)

您可以将Series.replace与参数regex=True一起用于替换substring s:

df = pd.DataFrame({'int_rate':['10.65%','7.90%']})
df['int_rate'] = df['int_rate'].replace("%","", regex=True).astype(float)
print (df)
   int_rate
0     10.65
1      7.90

Series.str.replace

df['int_rate'] = df['int_rate'].str.replace("%","")
print (df)
  int_rate
0    10.65
1     7.90
2         

Series.str.rstrip

df['int_rate'] = df['int_rate'].str.rstrip("%").astype(float)
print (df)
   int_rate
0     10.65
1      7.90

没有它就看到差异:

df = pd.DataFrame({'int_rate':['10.65%','7.90%', '%']})

df['int_rate_subs'] = df['int_rate'].replace("%","", regex=True)
df['int_rate_val'] = df['int_rate'].replace("%","")
print (df)
  int_rate int_rate_subs int_rate_val
0   10.65%         10.65       10.65%
1    7.90%          7.90        7.90%
2        %                           

答案 2 :(得分:2)

由于您正在使用字符串,因此可以使用

将值转换为浮点数
float(df['int_rate'][:-1])

这将从第一个位置到第二个位置读取字符串,即10.65而不是10.65%。