python pandas excel 实例_Python pandas 模块,ExcelWriter() 实例源码 - 编程字典

该段代码展示了如何使用Python pandas的ExcelWriter()将用户的数据,包括补充事件、睡眠活动、用户活动事件和生产力日志,导出到Excel文件中。通过创建不同的DataFrame并进行滚动窗口求和,生成了14天和28天的聚合数据,并将所有内容写入到内存的BytesIO流中,最终以HTTP响应形式返回下载链接。
部署运行你感兴趣的模型镜像

def get(self, request):

user = request.user

bytes_io = io.BytesIO()

writer = pd.ExcelWriter(bytes_io, engine='xlsxwriter', options={'remove_timezone': True})

# supplement events

supplement_events_worksheet_name = 'SupplementEvents'

supplement_events = SupplementLog.objects.filter(user=user)

df_builder = SupplementEventsDataframeBuilder(supplement_events)

supplement_events_df = df_builder.get_flat_daily_dataframe()

self._write_to_workbook(writer, supplement_events_df, supplement_events_worksheet_name)

# sleep events

sleep_activities_worksheet_name = 'SleepActivities'

sleep_activities = SleepLog.objects.filter(user=user)

df_builder = SleepActivityDataframeBuilder(sleep_activities)

sleep_activities_series = df_builder.get_sleep_history_series()

self._write_to_workbook(writer, sleep_activities_series, sleep_activities_worksheet_name)

# user activity events

user_activity_events_sheet_name = 'UserActivityEvents'

user_activity_events = UserActivityLog.objects.filter(user=user)

df_builder = UserActivityEventDataframeBuilder(user_activity_events)

user_activity_events_df = df_builder.get_flat_daily_dataframe()

self._write_to_workbook(writer, user_activity_events_df, user_activity_events_sheet_name)

# productivity logs

productivity_log_sheet_name = 'DailyProductivityLog'

productivity_log = DailyProductivityLog.objects.filter(user=user)

df_builder = ProductivityLogEventsDataframeBuilder(productivity_log)

# odd why this one isn't sorted the right way

productivity_log_df = df_builder.get_flat_daily_dataframe().sort_index(ascending=True)

self._write_to_workbook(writer, productivity_log_df, productivity_log_sheet_name)

all_dataframes = [productivity_log_df, supplement_events_df, user_activity_events_df]

concat_dataframe = pd.concat(all_dataframes, axis=1)

# include sleep which is a series and not a dataframe

cumulative_log_sheet_name = 'Aggregate Log'

concat_dataframe[SLEEP_MINUTES_COLUMN] = sleep_activities_series

self._write_to_workbook(writer, concat_dataframe, cumulative_log_sheet_name)

cumulative_14_day_dataframe_sheet_name = 'Aggregate 14 Log'

cumulative_14_day_dataframe = concat_dataframe.rolling(window=14, min_periods=1).sum()[14:]

self._write_to_workbook(writer, cumulative_14_day_dataframe, cumulative_14_day_dataframe_sheet_name)

cumulative_28_day_dataframe_sheet_name = 'Aggregate 28 Log'

cumulative_28_day_dataframe = concat_dataframe.rolling(window=28, min_periods=1).sum()[28:]

self._write_to_workbook(writer, cumulative_28_day_dataframe, cumulative_28_day_dataframe_sheet_name)

# make sure all the output gets writen to bytes io

writer.close()

# http response because we are providing data and not doing any template / rendering

response = HttpResponse(

bytes_io.getvalue(),

content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

response['Content-Disposition'] = 'attachment; filename=user_export_data.xlsx'

return response

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值