如何仅在符合RegEx条件时替换Pandas列中的值

y3bcpkx1  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(115)

我有以下 Dataframe :

d_test = {
    'c1' : ['31', '421', 'sgdsgd', '523.3'],
    'c2' : ['41', np.nan, '412', '412'],
    'test': [1,2,3,4],
}
df_test = pd.DataFrame(d_test)

我想把所有非浮点值替换为np.nan

0   31      41   1
1   421     NaN  2
2   NaN     412  3
3   523.3   412  4

我是这样做:

df_test[['c1', 'c2']] = df_test[['c1', 'c2']].replace(to_replace=r'^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$', value=np.nan, regex=True)

但结果却不是我所期待的:

0   NaN     NaN  1
1   NaN     NaN  2
2   sgdsgd  NaN  3
3   NaN     NaN  4
wz8daaqr

wz8daaqr1#

IIUC,可以将pandas.to_numericerrors="coerce"一起使用:
错误{'ignore'、' raise '、' coorce'},预设值为'raise':

  • 如果是'raise',则无效的剖析会引发例外状况。
  • 如果'coorce',则无效的剖析会设定为NaN
  • 如果'ignore',则无效解析将返回输入。
df_test = df_test.apply(pd.to_numeric, errors="coerce")
#输出:
print(df_test)
      c1     c2  test
0   31.0   41.0     1
1  421.0    NaN     2
2    NaN  412.0     3
3  523.3  412.0     4

相关问题