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

Min*_*sky 8 python pandas

我是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)

我有什么想法我做错了吗?非常感谢!

Gui*_*ume 5

正如您猜测的那样,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.因此,你存储Nonedf['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)


jez*_*ael 5

您可以将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)

Series.str.replace

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)

Series.str.rstrip

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)