RegEx求反以使用.replacement()处理Pandas数据帧中的十进制值



我有以下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)