SQL Alchemy를 사용하여 pandas에서 Microsoft SQL Server로 데이터 프레임을 내 보내야합니다. 많은 열은 문자열이며 누락 된 값과 일부 매우 긴 정수를 포함합니다. 99999999999999999999999999999999999. 이 숫자는 일종의 외래 키이므로 값 자체가 아무 의미도 없으므로 값을 문자열로 변환 할 수 있습니다.팬더 : 누락 된 값이있는 열을 문자열로 변환하는 방법?
SQL에 수출 할 때 이것은 SQL 연금술에서 다음과 같은 오류가 발생합니다
OverflowError: int too big to convert
내가 astype (STR)를 문자열로 변환 시도,하지만 내가없는 값으로 확인 된 문제로 실행 nans는 문자열 'nan'로 변환되므로 SQL은 해당 문자열을 nulls가 아닌 'nan'문자열로 간주합니다.
내가 찾은 유일한 해결책은 str로 변환 한 다음 'nan'을 numpy.nan으로 바꾸는 것입니다. 더 좋은 방법이 있습니까? 이것은 성 가시고, 상대적으로 느리며, 얻을 수있는만큼 만족스럽지 않습니다. 먼저 모든 것을 문자열로 변환합니다. 변환은 null을 문자열로 변환하므로 NaN으로 변환합니다. NaN은 부동 소수점 일 수 있습니다. 혼합형 컬럼.
아니면 그냥 빠져 나와 팬더가 누락 된 값을 처리하는 데 지독한가요?
내가 아래의 예를 가지고 : np.where
확실히 조금 더 빠른 비교 예
df['text'] = np.where(pd.isnull(df['text']),df['text'],df['text'].astype(str))
타이밍을 대체하는 것입니다 사용
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')
지정'DTYPE = object' 또는'.astype (object) ' –
열은 이미 객체입니다. –