我有以下数据帧:
df = pd.DataFrame({'A': ['2.5cm','2.5cm','2.56”','1.38”','2.2”','0.8 in','$18.00','4','2"']})
看起来像:
A
2.5cm
2.5cm
2.56”
1.38”
2.2”
0.8 in
$18.00
4
2"
我想删除除小数点以外的所有字符。
输出应为:
A
2.5
2.5
2.56
1.38
2.2
0.8
18.00
4
2
以下是我尝试过的:
df['A'] = df.A.str.replace(r"[a-zA-Z]", '')
df['A'] = df.A.str.replace('W', '')
但这是去掉所有的东西,包括小数点。
如有任何建议,我们将不胜感激。
提前感谢
您可以使用str.extract
仅提取浮点:
df['A'] = df['A'].astype(str).str.extract(r'(d+.d+|d)').astype('float')
但是,这里的'.'
匹配任何字符,而不仅仅是句点。因此它将匹配18,00
而不是18
。它也无法提取多位数的整数。使用下面的代码。(感谢@DYZ(:
df['A'] = df['A'].astype(str).str.extract(r'(d+.d+|d+)').astype('float')
输出:
A
0 2.50
1 2.50
2 2.56
3 1.38
4 2.20
5 0.80
6 18.00
7 4.00
8 2.00
试用str.extract
df['new'] = df.A.str.extract('(d*.d+|d+)').astype(float).iloc[:,0]
Out[31]:
0
0 2.50
1 2.50
2 2.56
3 1.38
4 2.20
5 0.80
6 18.00