首页 > 解决方案 > 如何使用字典重命名列?

问题描述

我有几个 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应该重命名为col2

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

df.rename(columns={"colA": "col1"}, inplace=True)

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

标签: pythonpandas

解决方案


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)

推荐阅读