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

Pandas使用concat拼接列表存储的DataFrame时报TypeError求解

报错根因

你遇到的类型错误核心原因是:alldfs列表里存储的是字符串类型的变量名,不是实际的DataFrame对象。
你直接写pd.concat((['result_14', 'result_12']), ignore_index=True)能运行成功,是因为代码里直接写的result_14、result_12是你当前环境中已经定义好的DataFrame变量,Python会直接识别为对应的DataFrame对象;但你把这两个名字加引号存到alldfs里时,列表里存的只是纯文本,pd.concat无法拼接字符串,自然会抛出only Series and DataFrame objs are valid的错误。

正确实现方式

根据你的代码逻辑,可以选以下两种方案:

方案1:直接存储DataFrame对象到列表(优先推荐,稳定性最高)

动态筛选、生成DataFrame的环节,不要存变量名的字符串,直接把DataFrame对象本身加入列表即可:

alldfs = []
# 循环/逻辑分支中拿到对应DataFrame后,直接追加对象
for idx in [12, 14]:
    # 替换成你实际生成/筛选result_12、result_14的逻辑
    current_df = 生成对应DataFrame的代码
    alldfs.append(current_df)

# 直接传入列表拼接即可,不需要额外套一层元组
merged_df = pd.concat(alldfs, ignore_index=True)

方案2:从运行环境中按变量名字符串取对应对象

如果你的代码逻辑只能先拿到变量名的字符串列表,可以通过全局/局部变量字典取出对应的实际DataFrame对象:

alldfs = ['result_14', 'result_12']
# 如果变量是全局定义的用globals(),函数内局部变量用locals()
df_objects = [globals()[df_name] for df_name in alldfs]
merged_df = pd.concat(df_objects, ignore_index=True)

提示:pd.concat第一个参数本身就接收可迭代的Series/DataFrame对象,不需要额外给列表套一层元组,直接传列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:09:29