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

如何将字符串作为列名传入pandas DataFrame解决列数不匹配报错

解决方案

错误原因

你当前的问题核心是:你拼接生成的colsTable是单个完整字符串,例如格式为'col1','col2',...,'col11',将其放入列表[colsTable]后,columns参数得到的是仅含1个元素的列表,和查询返回的11列数据数量不匹配,因此触发ValueError。
你尝试的exec()方案返回None,是因为exec执行的是语句而非表达式,本身没有返回值,无法直接赋值给tabla变量。

修复步骤

  1. 调整列名处理逻辑,不需要额外添加引号拼接,直接将从MySQL获取的列名字符串按逗号分割为列表即可:
cursor1.execute ("SELECT GROUP_CONCAT(COLUMN_NAME) AS cols FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'or_red' AND TABLE_NAME = 'nomen_prefix'")
for colsTableMysql in cursor1.fetchall() :
    colsTable = colsTableMysql[0]

# 直接分割为列名列表,无需拼接引号
cols_list = colsTable.split(',')
  1. 构造DataFrame时直接传入上述列表作为columns参数:
cursor = connection.cursor()
cursor.execute("SELECT * FROM or_red.nomen_prefix WHERE C_emp IN ("+emplazamientos+")")
tabla = pd.DataFrame(cursor.fetchall(), columns=cols_list)

兼容优化

如果你的列名本身包含逗号,会导致默认逗号分割出错,可以修改SQL的GROUP_CONCAT语句使用自定义分隔符:

SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR '|||') AS cols FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'or_red' AND TABLE_NAME = 'nomen_prefix'

对应Python分割逻辑改为cols_list = colsTable.split('|||')即可。


内容的提问来源于stack exchange,提问作者Edgar D.R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:01