保留原始列名

时间:2018-11-22 09:12:50

标签: python pandas

在重命名数据框时,我需要保留原始名称。例如。

class B {
   // how can I get const data here?
}  

ndf数据帧对象具有一个可以正常工作的属性original_names。但是,当我使用clean_names函数时,却没有此功能。

santandar_data = pd.read_csv(r"train.csv", nrows=40000)  
santandar_data.shape  

santandar_data.original_names=santandar_data.columns

ndf=santandar_data

ndf.original_names

Index(['ID', 'var3', 'var15', 'imp_ent_var16_ult1', 'imp_op_var39_comer_ult1',
       'imp_op_var39_comer_ult3', 'imp_op_var40_comer_ult1',
       'imp_op_var40_comer_ult3', 'imp_op_var40_efect_ult1',
       'imp_op_var40_efect_ult3',
       ...
       'saldo_medio_var33_hace2', 'saldo_medio_var33_hace3',
       'saldo_medio_var33_ult1', 'saldo_medio_var33_ult3',
       'saldo_medio_var44_hace2', 'saldo_medio_var44_hace3',
       'saldo_medio_var44_ult1', 'saldo_medio_var44_ult3', 'var38', 'TARGET'],
      dtype='object', length=371)
  

AttributeError:“ DataFrame”对象没有属性“ original_names”

clean_names函数来自:

https://github.com/ericmjl/pyjanitor/blob/master/janitor/functions.py

更改此功能以将原始列名包含为属性值的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

几乎可以肯定,您的pyjanitor.clean_names函数返回输入数据帧的副本。复制数据框为known to not copy arbitrary attributes assigned to an instance

但是,实际上,这些原始列标题不属于您的pd.DataFrame实例,因为您不能将它们直接用于标签或其他任何东西。

我的建议是将其存储为单独的变量。如果您需要与数据框进行分组,则可以使用字典以及任何其他元数据:

df_dct = {'df': santandar_data, 'original_names': santandar_data.columns}

df_dct['df'] = df_dct['df'].clean_names(...)