在尝试导出到SQL时,这会导致SQL Alchemy中出现以下错误:
OverflowError: int too big to convert
我尝试用astype(str)转换为字符串,但后来遇到了一个问题,即缺少的值(标识为nan)被转换为字符串“nan”——因此SQL不会将其视为null,而是将其视为字符串“nan”。
我找到的唯一解决方案是首先转换为str,然后用numpy替换“nan”。楠。有更好的方法吗?
这很麻烦,速度相对较慢,并且尽可能不连贯:首先我将所有内容转换为字符串,转换将null转换为字符串,因此我将它们转换为NaN,NaN只能是浮点型,最后是一个混合类型列。
还是我必须接受它,接受熊猫在处理缺失的价值观方面是可怕的?
我举了一个例子:
import numpy as np, pandas as pd, time
from sqlalchemy import create_engine, MetaData, Table, select
import sqlalchemy as sqlalchemy
start=time.time()
ServerName = "DESKTOP-MRX\SQLEXPRESS"
Database = 'MYDATABASE'
params = '?driver=SQL+Server+Native+Client+11.0'
engine = create_engine('mssql+pyodbc://' + ServerName + '/'+ Database + params, encoding ='latin1' )
conn=engine.connect()
df=pd.DataFrame()
df['mixed']=np.arange(0,9)
df.iloc[0,0]='test'
df['numb']=3.0
df['text']='my string'
df.iloc[0,2]=np.nan
df.iloc[1,2]=999999999999999999999999999999999
df['text']=df['text'].astype(str).replace('nan',np.nan)
print(df)
df.to_sql('test_df_mixed_types', engine, schema='dbo', if_exists='replace')