Мне нужно создать копию crsp.dsf в SQLite с использованием python. Crsp.dsf - это действительно очень большая таблица, и я настоятельно рекомендую сделать потоковое чтение или написать цикл, который повторяется на crsp.дсф по дате или пермно.В конце я должен убедиться, что у меня есть такое же количество наблюдений, уникальных дат, уникальных фирм и (примерно) сумма (округ (5)).
мой код следующим образом:
# import packages
import pandas as pd
import numpy as np
import mysql.connector
from dplython import (DplyFrame, X, diamonds, select, sift,
sample_n, sample_frac, head, arrange, mutate, group_by,
summarize, DelayFunction)
# def functions
def connect(db="crsp"):
conn = mysql.connector.connect(host="178.128.92.75",
port=3306,user="student_temp_user",
passwd="temp_userYxL",
db=db)
return conn
def queryMySQL(x,db='crsp'):
conn=connect(db=db)
response = pd.read_sql(x, conn)
conn.close()
return response
# write a loop that iterates on crsp.dsf by permno
permnos = queryMySQL('select distinct permno from crsp.msf').loc[:,'permno']
permnos.unique()
i=0
for item in permnos.unique():
result=queryMySQL('select * ' +
'from crsp.msf where permno = ' + str(item) + ' limit 5')
i=i+1
if i==1:
msf=pd.DataFrame(result)
if(i>1):
msf = msf.append(pd.DataFrame(result))
if i==83436:
break # take long time
msf
# write my own SQL table
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://student_temp_user:temp_userYxL@178.128.92.75/student_temp_user")
msf.to_sql(name='msf_copy',con=engine, if_exists='append', index=False)
# verification
print(queryMySQL('select count(*), count(distinct date), count(distinct permno), sum(round(ret,5)) from student_temp_user.msf_copy')
print(queryMySQL('select count(*), count(distinct date), count(distinct permno), sum(round(ret,5)) from crsp.msf')
в цикле, я более 80 тысяч, наверное, поэтому так долго.как улучшить код?возможно в моем коде что-то не так.