如何使用循环同时处理多个Pandas DataFrame并批量修改列名
批量修改列表中DataFrame的列名(添加DataFrame名称前缀)
这问题在批量处理DataFrame时挺常见的,不过有个小细节得先注意:你现在的lst1里只存了DataFrame对象本身,它们并没有自带df1、df2这些变量名——直接循环列表的话,咱们没法自动获取每个DataFrame对应的原变量名。所以得先把「名字」和「DataFrame对象」关联起来,推荐用字典来存储,这种方式最稳妥。
方法一:用字典关联名字与DataFrame(推荐)
先把你的DataFrame和对应的名字打包成字典,然后循环处理每个键值对:
import pandas as pd import numpy as np # 先定义你的DataFrame df1 = pd.DataFrame({'a':np.arange(4), 'b':np.arange(4)}) df2 = pd.DataFrame({'a':np.arange(4), 'b':np.arange(4)}) df3 = pd.DataFrame({'a':np.arange(4), 'b':np.arange(4)}) # 把DataFrame和名字对应成字典 df_dict = {'df1': df1, 'df2': df2, 'df3': df3} # 循环修改列名 for df_name, df in df_dict.items(): # 用列表推导式拼接名字和原列名 df.columns = [f"{df_name}{col}" for col in df.columns]
运行后,你打印df1就能看到想要的效果:
df1a df1b 0 0 0 1 1 1 2 2 2 3 3 3
方法二:如果坚持用原列表(需手动维护名字顺序)
如果你不想改列表的存储方式,那需要额外准备一个和lst1顺序完全对应的名字列表,用zip配对后循环:
lst1 = [df1, df2, df3] df_names = ['df1', 'df2', 'df3'] for name, df in zip(df_names, lst1): df.columns = [f"{name}{col}" for col in df.columns]
⚠️ 注意:这种方式必须保证df_names和lst1的顺序完全一致,不然会出现名字和DataFrame对应错误的问题,所以还是字典的方式更可靠。
补充说明
因为Pandas的DataFrame是可变对象,所以循环里修改df.columns会直接修改原来的df1、df2变量,不需要额外赋值回去,这点很方便~
内容的提问来源于stack exchange,提问作者rjk
相关产品推荐
相关产品推荐

