这个问题是出现在使用pymysql连接数据库,使用fetchall()获取数据。并初始化为dataframe时报错,初步排查问题可能是某个包版本不对。因为同样的代码之前跑的时候是可以的。
一、出错代码
import pymysql # 0.23.0
import pandas as pd
connection = pymysql.connect(host='xxx', user='root', password='xxx', database='finance',port=int(3306))
cursor = connection.cursor()
sql = '''
show databases
'''
cursor.execute(sql)
res = cursor.fetchall()
col = [item[0] for item in cursor.description]
crash_result = pd.DataFrame(res, columns=col)
print(crash_result)
二、报错信息
D:\Anaconda3_3.6.0\python.exe C:\Users\1\Desktop\Network_Robots_Project_linux\t.py
Traceback (most recent call last):
File "C:\Users\1\Desktop\Network_Robots_Project_linux\t.py", line 13, in <module>
crash_result = pd.DataFrame(res, columns=col)
File "D:\Anaconda3_3.6.0\lib\site-packages\pandas\core\frame.py", line 422, in __init__
raise ValueError('DataFrame constructor not properly called!')
ValueError: DataFrame constructor not properly called!
Process finished with exit code 1
三、问题原因
应该是pandas版本太低了(0.23.0的我就是这个原因)
四、问题解决解决
4.1)摆烂式解决
# 用一个list把res包住即可
crash_result = pd.DataFrame(list(res), columns=col)
4.2)迎难而上式解决
# 安装1.1.5版本的pandas
pip install pandas==1.1.5
文章出处登录后可见!
已经登录?立即刷新