如何将字符串作为列名传入pandas DataFrame解决列数不匹配报错
解决方案
错误原因
你当前的问题核心是:你拼接生成的colsTable是单个完整字符串,例如格式为'col1','col2',...,'col11',将其放入列表[colsTable]后,columns参数得到的是仅含1个元素的列表,和查询返回的11列数据数量不匹配,因此触发ValueError。
你尝试的exec()方案返回None,是因为exec执行的是语句而非表达式,本身没有返回值,无法直接赋值给tabla变量。
修复步骤
- 调整列名处理逻辑,不需要额外添加引号拼接,直接将从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(',')
- 构造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.
相关产品推荐
相关产品推荐

