如何通过循环实现多个pandas DataFrame分别与指定DataFrame d拼接
问题原因
你写的循环不生效的核心原因是Python的变量赋值逻辑:for循环迭代[a,b,c]时,临时变量x只是和原a/b/c变量指向同一个DataFrame对象的标签,你对x重新赋值只是把x这个标签绑定到了新生成的拼接后DataFrame上,完全不会修改原a/b/c变量的指向。
正确实现方式
方式1:直接修改原有独立变量(适合临时脚本快速处理)
用globals()方法访问和修改全局命名空间里的变量,运行后原a/b/c变量就会自动更新为拼接后的结果,和你逐行写的效果完全一致:
for var_name in ['a', 'b', 'c']: globals()[var_name] = pd.concat([globals()[var_name], d], axis=0)
方式2:用容器统一管理变量(推荐,适合正式代码)
把所有待拼接的DataFrame放到字典或者列表里统一处理,逻辑更清晰,也避免散列变量带来的维护问题:
用字典存储(保留名称标识)
# 先把所有df存入字典,key对应原来的变量名 df_dict = {'a': a, 'b': b, 'c': c} for key in df_dict: df_dict[key] = pd.concat([df_dict[key], d], axis=0) # 后续需要取用的时候直接用df_dict['a']、df_dict['b']即可
用列表存储(无需名称标识,按索引取用)
# 把df按顺序存入列表 df_list = [a, b, c] # 批量拼接 df_list = [pd.concat([df, d], axis=0) for df in df_list] # 后续按索引取用,df_list[0]对应原a的拼接结果,df_list[1]对应原b的结果,以此类推
内容的提问来源于stack exchange,提问作者Bùi Thu Thảo
相关产品推荐
相关产品推荐

