我有一个如下数据框:
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
答案 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