我有几个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"]
}
这意味着colA
和col_1
列应重命名为col1
,而colB
和col_2
列应重命名为{{1 }}。
我知道如何在pandas DataFrame中一一重命名列:
col2
但是,我对如何使用字典灵活地重命名列感到困惑?
答案 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()