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

pandas用pd.concat拼接含字符串列DataFrame报Expected tuple错误怎么办

报错核心原因

这个错误几乎都是不同sub_df的列索引(columns)的元素类型不统一导致的,结合你的场景具体触发逻辑如下:

  • 你原始的sub_df的n1~n1000列的列名是tuple类型:这类情况常见于你之前对数据做过pivot透视、多级索引列重置、或者读取了带复合表头的数据源,每一列的列名都是类似('n1',)、('n2',)的元组格式。
  • 你新增special_string列时,直接用了字符串作为列名:sub['x10081'] = some_value_i这个操作本身合法,但会让当前sub_df的列索引里同时存在tuple类型的旧列名、和string类型的新列名。
  • pd.concat拼接时会自动对齐所有输入df的列索引,当它尝试用tuple格式去匹配string类型的列名时,就会抛出TypeError: Expected tuple, got str的错误。你删除该列后所有列名都是tuple类型,类型统一就可以正常拼接,完全符合这个特征。

修复方案

你可以任选一种统一列名类型的方案,在拼接前对每个sub_df执行:

  • 方案1:把所有列名统一转为字符串(最简单通用)
sub_df.columns = [str(col) for col in sub_df.columns]
  • 方案2:把原始tuple列名转为普通字符串列名,保留原命名习惯
# 假设原始tuple列名只有一个元素
sub_df.columns = [col[0] if isinstance(col, tuple) else col for col in sub_df.columns]
  • 方案3:新增列时保持和原始列名相同的tuple类型
# 替换你原来的新增列代码,列名用tuple格式
sub[('special_string',)] = some_value_i

执行完之后再调用pd.concat(sub_df_list)就可以正常拼接。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:45:09