Я пытаюсь разбить таблицу оракулов на основе значений в столбце (названия больниц).Набор данных составляет ~ 3 млн строк в 66 столбцах.Я пытаюсь записать данные для 1 больницы из 3 разных таблиц в 1 книгу Excel на 3 разных листах.
У меня есть работающий код, который работал для ~ 700К строк, но новый набор слишком велик, и я столкнулся с проблемами с памятью.Я пытался изменить свой код, чтобы каждый раз попадать в базу данных для имени больницы, используя цикл for.Но я получаю xlsx ошибку закрытия его явно.
import cx_Oracle
import getpass
import xlsxwriter
import pandas as pd
path = "C:\HN\1"
p = getpass.getpass()
# Connecting to Oracle
myusername = 'CN138609'
dsn_tns = cx_Oracle.makedsn('oflc1exa03p-vip.centene.com', '1521', service_name='IGX_APP_P')
conn = cx_Oracle.connect(user=myusername, password=p, dsn=dsn_tns)
sql_4 = "select distinct hospital_name from HN_Hosp_Records"
df4 = pd.read_sql(sql_4,conn)
hospital_name = list(df4['HOSPITAL_NAME'])
for x in hospital_name:
hosp_name = {"hosp" : x}
sql_1 = "select * from HN_Hosp_Records where hospital_name = :hosp"
sql_2 = "select * from HN_CAP_Claims_Not_In_DHCS where hospital_name = :hosp"
sql_3 = "select * from HN_Denied_Claims where hospital_name = :hosp"
df1 = pd.read_sql(sql_1,conn,params=hosp_name)
df2 = pd.read_sql(sql_2,conn,params=hosp_name)
df3 = pd.read_sql(sql_3,conn,params=hosp_name)
df_dhcs = df1.loc[df1['HOSPITAL_NAME'] == x]
df_dw = df2.loc[df2['HOSPITAL_NAME'] == x]
df_denied = df3.loc[df3['HOSPITAL_NAME'] == x]
# Create a new excel workbook
writer = pd.ExcelWriter(path + x + "_HNT_P2_REC_05062019.xlsx", engine='xlsxwriter')
# Write each dataframe to a different worksheet.
df_dhcs.to_excel(writer, sheet_name="DHCS")
df_dw.to_excel(writer, sheet_name = "Not In DHCS")
df_denied.to_excel(writer, sheet_name = "Denied")
writer.close()
Вот предупреждение / ошибка, которую я получаю.Код не останавливается, но файл не выводится:
Файл "C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ xlsxwriter \ workbook.py", строка 153, в del повысить Исключение («Исключение, обнаруженное в деструкторе рабочей книги.» Исключение: Исключение, обнаруженное в деструкторе рабочей книги. Для рабочей книги может потребоваться явное close ().