Pandas - 从列中的浮点数中删除字符串

时间:2018-01-18 10:55:18

标签: python pandas data-cleaning

我有一个如下数据框:

plan type  hour status     code
A    cont   0    ok       010.0
A    cont   2    ok      025GWA
A    cont   0    notok   010VVT
A    cont   0    other     6.05
A    vend   1    ok        6.01

列代码有几个不同字母的字符串字符。最后,我想将'code'列转换为float。 我试过了:

df['code'] = df['code'].str.extract('(\d+)').astype(float)

但有了这个,我得到了:

plan type  hour status     code
A    cont   0    ok        10.0
A    cont   2    ok        25.0 
A    cont   0    notok     10.0
A    cont   0    other      6.0
A    vend   1    ok         6.0

如何获得如下结果?

plan type  hour status     code
A    cont   0    ok       10.00
A    cont   2    ok       25.00
A    cont   0    notok    10.00
A    cont   0    other     6.05
A    vend   1    ok        6.01

2 个答案:

答案 0 :(得分:2)

使用(\d*\.?\d*)

In [441]: df['code'].str.extract('(\d*\.?\d*)', expand=False).astype(float)
Out[441]:
0    10.00
1    25.00
2    10.00
3     6.05
4     6.01
Name: code, dtype: float64

答案 1 :(得分:1)

您可以考虑采用基于替代的方法,而不是提取。

使用str.replace,然后通过astype / to_numeric转换转换为浮动。

 df.code.str.replace('[^\d.]', '').astype(float)

或者,

pd.to_numeric(df.code.str.replace('[^\d.]', ''), errors='coerce')

0    10.00
1    25.00
2    10.00
3     6.05
4     6.01
Name: code, dtype: float64