【问题标题】:Replace Multiple Values of columns替换列的多个值
【发布时间】:2022-01-22 18:20:10
【问题描述】:

我有一个具有不同列名称(asset.new、few、value.issue 等)的数据框。我想更改列名中的一些字符或符号。我可以这样做:

df.columns = df.columns.str.replace('.', '_') 
df.columns = df.columns.str.replace('few', 'LOW') 
df.columns = df.columns.str.replace('value', 'PRICE') 
....

但我认为它应该有更好更短的方式。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以创建一个字典,将实际字符作为键,将替换作为值,然后遍历字典:

    df = pd.DataFrame({'asset.new':[1,2,3],
                       'few':[4,5,6],
                       'value.issue':[7,8,9]})
    replaceDict = { '.':'_', 'few':'LOW', 'value':'PRICE'}
    for k, v in replaceDict.items():
        df.columns = [c.replace(k, v) for c in list(df.columns)]
        
    print(df)
    

    输出:

    asset_new  LOW  PRICE_issue
    0          1    4            7
    1          2    5            8
    2          3    6            9
    

    或:

    df.columns = df.columns.to_series().replace(["\.","few","value"],['_','LOW','PRICE'],regex=True)
    

    产生相同的输出。

    【讨论】:

      【解决方案2】:

      在字典中使用Series.replace - 也需要转义.,因为特殊的正则表达式字符:

      d = { '\.':'_', 'few':'LOW', 'value':'PRICE'}
      
      df.columns = df.columns.to_series().replace(d, regex=True)
      

      re.esape 的更通用解决方案:

      import re
      
      d = { '.':'_', 'few':'LOW', 'value':'PRICE'}
      d1 = {re.escepe(k): v for k, v in d.items()}    
      df.columns = df.columns.to_series().replace(d1, regex=True)
      

      【讨论】:

        猜你喜欢
        • 2021-01-05
        • 2016-03-29
        • 2020-06-15
        • 2021-03-28
        • 2014-02-26
        • 2018-08-04
        • 2016-01-21
        • 2021-07-08
        • 1970-01-01
        相关资源
        最近更新 更多