错误描述:
使用pandas读取MySQL数据,并保存为dta格式时,出现:UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)错误。
错误解决:
将pd.to_stata("data.dta")改为pd.to_stata("data.dta",version=119)
参考资料:
IO tools (text, CSV, HDF5, …) — pandas 1.4.2 documentation
Support writing unicode characters in df.to_stata() · Issue #23573 · pandas-dev/pandas · GitHub
代码:
import pandas
import pymysql
# 连接数据库
con = pymysql.connect(host="localhost", user="user", password="secret", database="hello",charset="utf8")
# 选择要加载的表
sql = "SELECt * FROM hello.new"
# 读取指定表格内容
pd = pandas.read_sql(sql = sql,con = con)
# 保存为dta格式数据,保存为dta格式的数据时,必须要加参数version=119,否则报错。
#pd.to_stata("data.dta") #报“UnicodeEncodeError”错误
pd.to_excel("data.xlsx") #正常
# 正确保存方式
pd.to_stata("data.dta",version=119)



