使用 .replace() 处理 Pandas 数据帧中的小数值的 RegEx 否定

RegEx negation to handle decimal values in Pandas dataframe using .replace()

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

如何处理小数?

谢谢!

正则表达式仅适用于字符串。 您可以使用 .astype(str)

将所有值转换为字符串
df['Other'].astype(str).replace('[^0-9]', np.NaN, regex=True)