Использование python, pandas, to_excel с движком xlsxwriter;Оптимизация создания 1500+ книг xlsx с несколькими вкладками - PullRequest
0 голосов
/ 27 ноября 2018
import pandas as pd
# Load dataframes 0 and 00 with grant and gift specific columns
df0 = pd.read_csv('test_sample.csv', usecols=
                    ('typeCategory','tran_id',
                    'issue_d','disbursement_d','fund_id','fund_nm', 'amount','grantee_legal_nm'))
df00 = pd.read_csv('test_sample.csv', usecols=
                    ('typeCategory','tran_id',
                    'issue_d','fund_id','fund_nm', 'amount'))
# define df1 and df2 selecting only those of appropriate type category
df1 = df0[df0['typeCategory'] == 'grant']
df2 = df00[df00['typeCategory'] == 'gift']

# create list of ids to iterate through
grantingFundID = list(df0['fund_id'].values)
#cell_format = workbook.add_format()

#df1.columns
# load logo file as binary
# read image data into variable to be used in loop to follow
image_file = open('logo1.png', 'rb')
image_data = io.BytesIO(image_file.read())

# loop through both df1 and df2 (grants/gifts) for each fund_id
for fund_id in grantingFundID:
    df3= df1[df1['fund_id'] == fund_id]
    df4= df2[df2['fund_id'] == fund_id]
# create writer object set engine to xlsx writer, drop index col
    writer =  pd.ExcelWriter(str(fund_id)+'.xlsx', engine='xlsxwriter')
    df3.to_excel(writer, 'grants',index=False)
    df4.to_excel(writer, 'gifts',index=False)
# create workbook object
    workbook = writer.book
# Create worksheet object for first tab
    worksheet = writer.sheets['grants']

'''setup grants tab formatting'''
# set_margins so as not to overlap startings rows with header png
    worksheet.set_margins(top=1.3)
#set header row and insert left &L logo.png. Used &G (&[Picture] could have
#also been used.
    worksheet.set_header('&L&G', {
                                  'image_left': 'logo.png',
                                  'image_data_left': image_data
                                  })
# set column width
    worksheet.set_column(0,30,20)
# write gifts tab
    worksheet = writer.sheets['gifts']
# setup gifts tab formatting
# ...
    workbook.close()

Предыдущий код генерирует две вкладки в новом файле xlsx, используя данные, считанные из CSV.Я генерирую 1500+ файлов.В настоящее время код работает.Я ищу способ оптимизировать мой подход, поскольку генерация файлов в настоящее время занимает около 20 минут.Есть ли лучший подход к этой проблеме?

...