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