如何用for循环实现多组DataFrame的pd.concat拼接操作?
解决批量DataFrame拼接的循环实现问题
嘿,我懂你想通过循环简化这些重复的拼接操作,你原来的代码之所以报错,是因为不能直接通过字符串拼接的方式动态创建变量名,而且df_ab+str(i+1)这种写法也没法直接获取到对应的df_ab1、df_ab2这类已存在的DataFrame对象。下面给你两种规范且易维护的实现方案:
方案一:使用字典存储结果(推荐,可通过键名快速访问)
字典可以让你像原来的变量名那样,通过df_dict['df_1']来访问对应的拼接结果,同时避免污染全局命名空间:
import pandas as pd import numpy as np # 假设df_ab1到df_ab9、df_xy1到df_xy9已经定义好 df_dict = {} for i in range(1, 10): # 通过globals()获取全局变量中的对应DataFrame df_ab = globals()[f'df_ab{i}'] df_xy = globals()[f'df_xy{i}'] # 拼接后存入字典 df_dict[f'df_{i}'] = pd.concat([df_ab, df_xy], axis=1) # 调用示例:获取第3个拼接结果 print(df_dict['df_3'])
方案二:使用列表存储结果(适合按顺序访问)
如果不需要按命名访问,只是想批量生成拼接后的DataFrame,用列表会更简洁:
df_list = [] for i in range(1, 10): df_ab = globals()[f'df_ab{i}'] df_xy = globals()[f'df_xy{i}'] df_list.append(pd.concat([df_ab, df_xy], axis=1)) # 调用示例:获取第3个拼接结果(注意列表索引从0开始) print(df_list[2])
为什么不推荐直接动态创建变量?
虽然可以通过globals()[f'df_{i}'] = pd.concat(...)的方式直接生成df_1到df_9这类变量,但这种做法会让你的代码难以维护——你很难追踪这些动态生成的变量,而且容易和现有变量产生命名冲突,所以优先用字典或列表这类容器来管理批量生成的对象。
内容的提问来源于stack exchange,提问作者ER1C ZZ
相关产品推荐
相关产品推荐

