在重命名数据框时,我需要保留原始名称。例如。
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
更改此功能以将原始列名包含为属性值的最佳方法是什么?
答案 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(...)