如何通过dataframe名称字符串列表拼接多个pandas dataframe?
实现方法说明
结论
该需求可以实现,但仅推荐在交互式场景(如Jupyter Notebook、终端调试)中使用,正式生产代码不建议依赖变量名字符串做逻辑,会大幅提升维护和排查问题的成本。
直接匹配变量名的实现方式
你可以通过globals()(全局作用域)或locals()(局部作用域)获取当前环境的变量字典,通过字符串名称匹配到对应的DataFrame对象,再传入pd.concat即可,封装后的调用方式和你预期的完全一致:
import pandas as pd # 示例DataFrame定义 df1 = pd.DataFrame({'x': [1, 2, 3], 'y': ['a', 'b', 'c']}) df2 = pd.DataFrame({'x': [4, 5, 6], 'y': ['d', 'e', 'f']}) def concat_by_name(df_name_list: list[str], **concat_kwargs) -> pd.DataFrame: # 从全局作用域提取对应名称的DataFrame,局部作用域可替换为locals() df_objects = [globals()[name] for name in df_name_list] return pd.concat(df_objects, **concat_kwargs) # 直接传入字符串列表调用 result = concat_by_name(['df1', 'df2'])
更稳妥的替代方案
如果要规避作用域依赖的问题,推荐提前把所有DataFrame存入字典,用字符串作为字典的key,拼接时直接从字典取值即可:
import pandas as pd # 提前把DataFrame存入字典,key为对应的字符串名称 df_storage = { 'df1': pd.DataFrame({'x': [1, 2, 3], 'y': ['a', 'b', 'c']}), 'df2': pd.DataFrame({'x': [4, 5, 6], 'y': ['d', 'e', 'f']}) } # 拼接时直接通过字符串列表取值 target_names = ['df1', 'df2'] result = pd.concat([df_storage[name] for name in target_names])
这种写法兼容性更强,也不会因为变量作用域变动、变量名拼写错误引发非预期的报错,更适合在正式代码中使用。
内容的提问来源于stack exchange,提问作者Vedda
相关产品推荐
相关产品推荐

