【问题标题】:How to add logic to list comprehension when renaming columns?重命名列时如何为列表理解添加逻辑?
【发布时间】:2021-08-27 15:00:15
【问题描述】:

我有字典,我用它来重命名数据框中的列,如下所示:

column_names = {name1:rename1, name2:rename2}
new_df = df[[k for k in column_names.keys()]]
new_df.rename(columns=columns_dict, inplace=True)

当一个新字段出现在字典中时,我在代码的这一行收到此错误:

code: new_df = df[[k for k in column_names.keys()]]
issue: KeyError: "['new_col'] not in index"

如何在重命名值时为列表理解创建一个灵活的解决方案,如果 df 或字典中存在新值,则包含该列并将其分配为零值?

我尝试创建一些尝试捕获,但我不确定在此之后如何继续:

        try:
           new_df = df[[k for k in column_names.keys()]]
           new_df.rename(columns=columns_dict, inplace=True)
        except:
           #assign the failed column back to original df (named df) and assign value 
           #of zero
           #rerun all steps in try block.
  

【问题讨论】:

    标签: python python-3.x pandas dictionary


    【解决方案1】:

    尝试更改这行代码

    new_df = df[[k for k in column_names.keys() if k in df.columns]]
    

    【讨论】:

      【解决方案2】:

      IIUC,您可以将column_names 分为两部分:同样在df 列中的条目以及其他。然后用第一部分索引和重命名,用第二部分赋值:

      # get the non-existent ones
      to_assign = column_names.keys() - df.columns
      
      # drop them
      [column_names.pop(key) for key in to_assign]
      
      # subset the `df` with what remained
      ndf = df[column_names.keys()]
      
      # rename them
      ndf = ndf.rename(columns=column_names)
      
      # assign the other ones (with zeros)
      ndf = ndf.assign(**dict.fromkeys(to_assign, 0))
      

      例如,

      In []: df
      Out[]:
      
         L_1  D_1  L_2   D_2
      0  1.0    7  NaN   NaN
      1  1.0   12  1-1  play
      2  NaN   -1  1-1  play
      3  1.0    9  1-1  play
      
      In []: column_names = {"L_1": "M_1", "L_4": "Z_5", "D_1": "E_1"}
      
      In []: ndf = above_operations...
      
      In []: ndf
      Out[]:
      
         M_1  E_1  L_4
      0  1.0    7    0
      1  1.0   12    0
      2  NaN   -1    0
      3  1.0    9    0
      

      【讨论】:

        猜你喜欢
        • 2011-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        相关资源
        最近更新 更多