升级至Python3.9.5后pandas+pymysql查询数据异常求助
Python3.9下pandas+pymysql读取DataFrame内容异常解决办法
问题根源
这是pymysql 1.1.0版本和Python3.9、pandas1.3的兼容性bug——使用DictCursor时,pandas无法正确解析游标返回的字典结构数据,错误地把列名重复填充到每个单元格里。
可行解决方法
1. 替换游标类型
去掉cursorclass=mysql.cursors.DictCursor配置,用默认的游标(或者显式指定Cursor):
conn = mysql.connect(host='xxxxxxxxxxxxxxxx', user='xxxxxxxxxxxxxx', password='xxxxxxxxxxxxxxxx', db='xxxxxxxxxxxx', charset='utf8', port=xxxxxxxxxxx) # 或者显式指定 # conn = mysql.connect(..., cursorclass=mysql.cursors.Cursor)
默认游标返回元组格式的查询结果,pandas能正常解析生成正确的DataFrame。
2. 升级pymysql版本
pymysql后续版本修复了这个Python3.9下的兼容性问题,直接升级到1.1.1及以上版本即可:
pip install --upgrade pymysql
3. 手动处理查询结果
如果暂时不能改游标或升级库,可以手动执行查询再转DataFrame:
import pandas as pd import pymysql as mysql conn = mysql.connect(host='xxxxxxxxxxxxxxxx', user='xxxxxxxxxxxxxx', password='xxxxxxxxxxxxxxxx', db='xxxxxxxxxxxx', charset='utf8', port=xxxxxxxxxxx, cursorclass=mysql.cursors.DictCursor) somesql = """SELECT * FROM SOMETABLE;""" with conn.cursor() as cursor: cursor.execute(somesql) # 直接获取字典列表后转DataFrame df = pd.DataFrame(cursor.fetchall())
内容的提问来源于stack exchange,提问作者Derek_P
相关产品推荐
相关产品推荐

