Python 保留原始列名

Python 保留原始列名,python,pandas,Python,Pandas,在重命名dataframe时,我需要保留原始名称。例如 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_u

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

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)
ndf dataframe对象具有一个正确工作的属性“原始名称”。但是当我使用clean_names函数时,我没有得到这个功能

df=santandar_data.clean_names(case_type="upper", remove_special=True).limit_column_characters(3)
df.original_names
AttributeError:“DataFrame”对象没有“原始名称”属性

clean_names函数来自:


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

几乎可以肯定您的
pyjanitor.clean_names
函数会返回输入数据帧的副本。复制数据帧是非常困难的

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

我的建议是将其存储为单独的变量。如果需要使用数据帧分组,可以使用字典和任何其他元数据:

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

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

santandar_data.original_names?
clean_names
可能会返回数据帧的副本。我相信在熊猫的某些版本中,属性不一定会被复制。