我是Python的新手,请原谅我这个简单的问题.我正在尝试将字符串转换为浮点数.以下是数据示例:
0 10.65%
1 7.90%
Run Code Online (Sandbox Code Playgroud)
当我尝试:
df['int_rate'] = df['int_rate'].astype('float')
Run Code Online (Sandbox Code Playgroud)
我明白了:
ValueError: could not convert string to float: '13.75%'
Run Code Online (Sandbox Code Playgroud)
当我尝试:
df['int_rate'] = df['int_rate'].replace("%","", inplace=True)
Run Code Online (Sandbox Code Playgroud)
检查我的数据,我得到:
0 None
1 None
Run Code Online (Sandbox Code Playgroud)
我有什么想法我做错了吗?非常感谢!
正如您猜测的那样,ValueError: could not convert string to float: '13.75%'表示该%字符阻止了转换.
现在,当您尝试删除它时:
df['int_rate'] = df['int_rate'].replace("%","", inplace=True)
Run Code Online (Sandbox Code Playgroud)
您设置inplace=True了替换,顾名思义,就地更改了数据帧,因此replace()方法调用返回None.因此,你存储None在df['int_rate']与仅包含一列最终None值.你应该这样做:
df['int_rate'] = df['int_rate'].replace("%","")
Run Code Online (Sandbox Code Playgroud)
要么
df['int_rate'].replace("%","", inplace=True)
Run Code Online (Sandbox Code Playgroud)
您可以将Series.replacewith参数regex=True用于replace substrings:
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
Run Code Online (Sandbox Code Playgroud)
df['int_rate'] = df['int_rate'].str.replace("%","")
print (df)
int_rate
0 10.65
1 7.90
2
Run Code Online (Sandbox Code Playgroud)
df['int_rate'] = df['int_rate'].str.rstrip("%").astype(float)
print (df)
int_rate
0 10.65
1 7.90
Run Code Online (Sandbox Code Playgroud)
看到没有它的区别:
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 %
Run Code Online (Sandbox Code Playgroud)