【问题标题】:How can i replace part of a column name with a dict in python?如何在 python 中用 dict 替换列名的一部分?
【发布时间】:2022-01-08 00:08:02
【问题描述】:

我有列名,例如:

ab_sells_cde_104_frm, ab_sells_cde_105_frm, ab_sells_cde_120_frm

我也有一个类似的字典:

dict_2 = {'115': 'SERVICES',
 '116': 'HEA',
 '117': 'HOME',
 '104': 'AI'} 

我希望用这个字典替换列标题中的 3 位数字。我不确定我是如何尝试的:

df.replace(dict_2, regex=True) 

这个deoes没有做任何事情。我该怎么做?

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    您可以对re.sub 使用简单的列表推导:

    import re
    df.columns = [re.sub('\d+', lambda m: dict_2.get(m.group(0), m.group(0)), s)
                  for s in df.columns]
    

    输出:

      ab_sells_cde_AI_frm ab_sells_cde_105_frm ab_sells_cde_120_frm
    0                  NA                   NA                   NA
    

    【讨论】:

      【解决方案2】:

      使用Index.to_series 将列转换为SeriesSeries.replace

      c = 'ab_sells_cde_104_frm, ab_sells_cde_105_frm, ab_sells_cde_120_frm'.split(', ')
      df = pd.DataFrame(columns=c)
      
      dict_2 = {'115': 'SERVICES',
       '116': 'HEA',
       '117': 'HOME',
       '104': 'AI'} 
      
      df.columns = df.columns.to_series().replace(dict_2, regex=True)
      print (df)
      Empty DataFrame
      Columns: [ab_sells_cde_AI_frm, ab_sells_cde_105_frm, ab_sells_cde_120_frm]
      Index: []
      

      或者如果需要通过str.replace 回电替换:

      df.columns = df.columns.str.replace('\d+', lambda x: dict_2.get(x.group(0), x.group(0)), regex=True)
      
      print (df)
      Empty DataFrame
      Columns: [ab_sells_cde_AI_frm, ab_sells_cde_105_frm, ab_sells_cde_120_frm]
      Index: []
      

      用长度为3的整数替换:

      df.columns = df.columns.str.replace('\d{3}', lambda x: dict_2.get(x.group(0), x.group(0)), regex=True)
      
      print (df)
      Empty DataFrame
      Columns: [ab_sells_cde_AI_frm, ab_sells_cde_105_frm, ab_sells_cde_120_frm]
      Index: []
      

      【讨论】:

      • 小心,如果有重叠的代码(例如1104),这将导致部分匹配('1AI')
      • @mozway - 好的,添加了新的解决方案,但仍然不确定是否只替换前 3 位数字
      猜你喜欢
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2018-03-12
      • 2011-04-02
      • 2020-12-07
      • 2015-03-03
      • 1970-01-01
      相关资源
      最近更新 更多