背景:user_pay_view表涉及6亿条交易数据,如果直接读数据,则服务器内存很可能吃不消
解决思路:分治法,使用trunk分块读数据,再进行数据预处理或聚合操作
# 分块读取,每次读取一百万条数据
user_pay_chunks = pd.read_csv(r'D:\data_clean\user_pay_new.csv', chunksize=1000000)
# 查看每位user_id购买次数
user_pay_cnt = pd.DataFrame() # 创建空的df用于接收处理后的数据
for chunk in user_pay_chunks:
user_pay_cnt = user_pay_cnt.append(chunk[['user_id', 'shop_id']].\
groupby('user_id', as_index=False).agg('count').rename(columns={'shop_id': 'pay_cnt'}))
# 数据汇总
result = user_pay_cnt[['user_id', 'pay_cnt']].groupby('user_id',as_index=False).\
agg('sum').sort_values(by='pay_cnt', ascending=False)
print(result.head(10))
# 写入文件
writer = pd.ExcelWriter(r'D:\data_clean\result.xlsx', mode='a', engine='openpyxl')
result.to_excel(writer, sheet_name='购买次数', index=False)
writer.save()
writer.close()
打印结果预览(支付次数前10的客户)
index user_id pay_cnt
2985722 3450024 293
5935975 6859327 291
9367299 10823305 290
11597984 13400904 290
1768702 2043685 288
8468424 9785313 286
11218183 12961775 284
10122252 11695582 283
1261271 1457920 283
15371250 17759978 283