【问题标题】:How to replace values in Pandas columns only if RegEx condition is matched仅当 RegEx 条件匹配时如何替换 Pandas 列中的值
【发布时间】:2022-12-09 08:41:48
【问题描述】:

我有以下数据框:

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    IIUC,你可以使用pandas.to_numericerrors="coerce"

    errors{‘ignore’, ‘raise’, ‘coerce’},默认‘raise’:

    • 如果是“raise”,则无效解析将引发异常。

    • 如果 '胁迫’,则无效解析将设置为钠盐.

    • 如果“忽略”,则无效解析将返回输入。

    df_test = df_test.apply(lambda _: 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
    

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 1970-01-01
      • 2022-06-28
      • 2020-12-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多