【发布时间】:2021-06-05 20:15:19
【问题描述】:
在一个 jupyter 笔记本中,我可以创建两个 Pandas 数据框并将它们导出到 Excel 工作簿的各个工作表中,并带有一些额外的格式,包括文本换行、冻结窗格、粗体标题和自动过滤器。
代码如下:
# MODULES
import pandas as pd
import numpy as np
from datetime import date
#CONSTRUCT DATAFRAME
df = pd.DataFrame({'Data': [10, 22, 31, 43, 57, 99, 65, 74, 88],
'Data2':[10, 22, 31, 43, 57, 99, 65, 74, 88],
'Data3':[10, 22, 31, 43, 57, 99, 65, 74, 88]})
#CONSTRUCT DATAFRAME
df2 = pd.DataFrame({'df2_Data': ['blue', 'yellow', 'purple', 'orange', 'green', 'brown', 'gray', 'white', 'red'],
'df2_Data2':['bike', 'car', 'bus', 'train', 'boat', 'truck', 'plane', 'scooter', 'skateboard'],
'df2_Data3':['chicken', 'cow', 'dog', 'crocodile', 'snake', 'pig', 'rat', 'mouse', 'monkey']})
#DATE FOR INCLUSION IN FILENAME
today = date.today()
d2 = today.strftime("%B %d, %Y")
writer = pd.ExcelWriter('ExcelExample{}.xlsx'.format(d2), engine='xlsxwriter')
sheets_in_writer=['Sheet1','sheet2']
data_frame_for_writer=[df, df2]
for i,j in zip(data_frame_for_writer,sheets_in_writer):
i.to_excel(writer,j,index=False)
### Assign WorkBook
workbook=writer.book
# Add a header format
header_format = workbook.add_format({'bold': True,'text_wrap': True,'size':10,
'valign': 'top','fg_color': '#c7e7ff','border': 1})
### Apply same format on each sheet being saved
for i,j in zip(data_frame_for_writer,sheets_in_writer):
for col_num, value in enumerate(i.columns.values):
writer.sheets[j].set_column(0, max_col - 1, 12)
writer.sheets[j].write(0, col_num, value, header_format)
writer.sheets[j].autofilter(0,0,0,i.shape[1]-1)
writer.sheets[j].freeze_panes(1,0)
writer.save()
这将生成以下 Excel 工作簿,其中两个/所有工作表都应用了格式。
由于我不熟悉 boto3,我正在努力在 AWS lambda 函数中重现此功能
我的尝试如下,它确实将 Excel 文件保存到指定的目的地,但当然没有所需的格式。
import boto3
import numpy as np
import pandas as pd
import io
from io import BytesIO
from io import StringIO
from datetime import date
def lambda_handler(event, context):
s3 = boto3.client('s3')
# STORE TODAY'S DATE
today = date.today()
d2 = today.strftime("%B %d, %Y")
print("d2 =", d2)
#SPECIFY OUTPUT EXCEL FILE NAME AND FILEPATH
bucket = 'brnddmn-s3'
filepath = 'output/'ExcelExample{}.xlsx'.format(d2)
# GENERATE AND EXPORT EXCEL FILE TO BUCKET
with io.BytesIO() as output:
with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name = 'Sheet1')
df2.to_excel(writer, sheet_name = 'Sheet2')
data = output.getvalue()
s3 = boto3.resource('s3')
s3.Bucket(bucket).put_object(Key=filepath, Body=data)
非常感谢任何帮助。
【问题讨论】:
标签: python-3.x pandas aws-lambda boto3 xlsxwriter