【问题标题】:If substring in string, replace string with number如果字符串中有子字符串,则将字符串替换为数字
【发布时间】:2022-11-12 01:23:52
【问题描述】:

我有以下映射

mapping = {'sum12':2, 'sum6':1,
            'avg12':2, 'avg6':1,
            'diff':3, 'mean':4}

我有一个带有变量的数据框,例如

        var1      var2
0  abc_sum12  mean_jkl
1   pqr_sum6  pqr_avg6
2   diff_xyz    qwerty

如果数据框中的字符串中存在任何子字符串,我想用它们对应的值替换它们。如果不存在子字符串,我想用np.nan 替换它。目前,我能想到的唯一解决方案是遍历每一行,检查每个字符串中是否存在任何子字符串,并将其替换为与该子字符串对应的特定数字。有没有更好的方法来做到这一点。

最后的输出将是

   var1  var2
0     2   4.0
1     1   1.0
2     3   NaN

【问题讨论】:

    标签: python


    【解决方案1】:

    我相信如果您使用正则表达式替换,它将部分匹配并为您提供所需的结果。唯一的例外是 qwerty 值将保持不变。如果您随后将整个 df 强制为数字,它将为该值或任何其他非数字返回 NaN

    import pandas as pd
    mapping = {'sum12':2, 'sum6':1,
                'avg12':2, 'avg6':1,
                'diff':3, 'mean':4}
    
    df = pd.DataFrame({'var1': ['abc_sum12', 'pqr_sum6', 'diff_xyz'],
     'var2': ['mean_jkl', 'pqr_avg6', 'qwerty']})
    
    df = df.replace(mapping, regex=True).apply(lambda x: pd.to_numeric(x, errors='coerce'))
    
    print(df)
    

    输出

       var1  var2
    0     2   4.0
    1     1   1.0
    2     3   NaN
    

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2017-03-23
      • 2012-04-03
      • 2013-07-23
      相关资源
      最近更新 更多