如何使用字典重命名列?

时间:2019-03-26 19:00:46

标签: python pandas

我有几个Pandas DataFrame,我想对齐它们的列名,以便所有它们都具有特定列的相同名称(不是所有列)。

在我的真实数据集中,我有很多列,但是在下面,我提供了3个DataFrame的简化示例。它们都具有相同的内容,但是这样做是为了简化示例。

df1 =

col1   col2    col3
111    123     abc
122    331     zzz

df2 =

colA   colB    col3
111    123     abc
122    331     zzz

df3 =

col_1   col_2    col3
111     123      abc
122     331      zzz

然后我有以下指定相似列的字典(实际上,字典更大):

col_names = {
  "col1": ["colA", "col_1"],
  "col2": ["colB", "col_2"]
}

这意味着colAcol_1列应重命名为col1,而colBcol_2列应重命名为{{1 }}。

我知道如何在pandas DataFrame中一一重命名列:

col2

但是,我对如何使用字典灵活地重命名列感到困惑?

2 个答案:

答案 0 :(得分:2)

df1.rename(columns={col_names[key][0]: key for key in col_names}, inplace=True)
df2.rename(columns={col_names[key][1]: key for key in col_names}, inplace=True)

如果字典中值的顺序是随机的,并且不确定数据框中的列,则可以使用。

df1 = pd.DataFrame({'col1': [1]*3, 'col2': [2]*3, 'col3': [3]*3})
df2 = pd.DataFrame({'colA': [11]*3, 'colB': [22]*3, 'col3': [33]*3})
df3 = pd.DataFrame({'col_1': ['a']*3, 'col_2': ['b']*3, 'col3': ['c']*3})
col_names = {
  "col1": ["colA", "col_1"],
  "col2": ["colB", "col_2"]
}
cols = {}
for key,value in col_names.items():
    for v in value:
        cols[v] =  key
for df in [df1,df2,df3]:
   df.rename(columns=cols, inplace=True)

答案 1 :(得分:0)

尝试:

df.columns = pd.Series(df.columns.to_list()).replace({'colA':'col1'}).to_list()