我有以下Pandas数据帧:
foo = {
'Sales' : [200, 'bar', 400, 500],
'Expenses' : [70, 90, 'baz', 170],
'Other' : [2.5, 'spam', 70, 101.25]
}
df = pd.DataFrame(foo)
Sales Expenses Other
200 70 2.5
bar 90 spam
400 baz 70
500 170 101.25
我想删除非数字值并替换为NaN
。我这样做如下:
df['Other'] = df['Other'].replace('[^0-9.]', np.NaN, regex=True)
这让我:
Sales Expenses Other
200 70 2.5
bar 90 NaN
400 baz 70
500 170 101.25
不处理小数。我希望[^0-9.]
能处理小数,但它没有。以下(没有转义小数(会产生相同的输出:
df['Other'] = df['Other'].replace('[^0-9]', np.NaN, regex=True)
Sales Expenses Other
200 70 2.5
bar 90 NaN
400 baz 70
500 170 101.25
我该如何处理小数?
谢谢!
Regex只适用于字符串。您可以使用.astype(str(将所有值强制转换为字符串
df['Other'].astype(str).replace('[^0-9]', np.NaN, regex=True)