You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何将存储DataFrame变量名的字符串列表转为可用于pd.concat的对象

核心问题说明

你当前的list_2存储的是字符串形式的变量名,而pd.concat仅接收实际的DataFrame/Series对象作为输入,直接传入字符串列表会触发类型错误,完全无法完成拼接。你现在写的pd.concat([*list_2], axis=1)解包后传入的全是类似"table_2_1_1"的字符串,pandas无法自动通过字符串找到对应的变量实体。

两种可落地的修正方案

方案1:去掉冗余的动态变量生成逻辑(推荐)

你现在循环里用vars()动态创建零散变量名、再把变量名字符串存进列表的操作完全是多余环节,直接把循环里获取到的DataFrame对象存入列表即可:

list_1 = ["1", "2", "3", "4"]
df_storage = []

for x in list_1:
    # 直接拿到table对象转成的DataFrame,存入列表
    current_df = table_2_1.table(x)
    df_storage.append(current_df)

# 直接把对象列表传给concat即可完成拼接
table21 = pd.concat(df_storage, axis=1)

这种写法不会污染全局命名空间,逻辑更简洁,也不会出现字符串和实际对象脱节的问题。

方案2:如果必须保留原有动态生成变量的逻辑

如果之前的代码已经生成了一批零散的table_2_1_x命名空间变量,可以通过全局命名空间的字典,根据存储的字符串变量名取出对应的真实DataFrame对象:

list_1 = ["1", "2", "3", "4"]
list_2 = []

for x in list_1:
    vars()['table_2_1_' + x] = table_2_1.table(x)
    list_2.append('table_2_1_' + x)

# 根据字符串变量名,从全局命名空间取出对应的真实DataFrame对象
target_dfs = [globals()[var_name] for var_name in list_2]
table21 = pd.concat(target_dfs, axis=1)
注意事项
  • 不要把变量名字符串直接传给pd.concat,函数本身没有根据字符串自动搜索对应变量的内置逻辑。
  • 不推荐长期使用动态生成零散命名变量的写法,这类写法会让代码可读性大幅下降,后续排查问题难度很高,优先用列表/字典统一存储对象更稳妥。

内容的提问来源于stack exchange,提问作者an1uk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 22:15:05