我是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
任何想法我做错了什么?非常感谢!
答案 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
df['int_rate'] = df['int_rate'].str.replace("%","")
print (df)
int_rate
0 10.65
1 7.90
2
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%。