前言说明
支付宝和微信的账单数据格式不一样,在记账的时候就很麻烦,通过Pyhon将清洗整合的步骤固定下来以节省时间。
账单数据清洗合并
在运行代码之前,默认已经将文件都解码提取出来了。
import pandas as pd
import numpy as np
import datetime, time
#微信账单读取
wecj=pd.read_csv('微信j.csv',skiprows=16,usecols=['交易时间','交易类型','交易对方','商品','收/支','金额(元)','支付方式','当前状态'])
#格式转换
wecj['交易时间']= pd.to_datetime(wecj['交易时间'], format="%Y-%m-%d %H:%M:%S")
#delet charter
wecj['金额(元)'] = wecj['金额(元)'].map(lambda date_str: date_str[1:])
#conver dtype
wecj['金额(元)'] = wecj['金额(元)'].astype(np.float)
#账号命名
wecj['账号'] = '微信'
#支付宝账单读取
#ali=pd.read_csv('支付宝.csv',skiprows=1,skipfooter=21,encoding='gbk')
#查看列名
#ali.columns
#选用特定的几列数据
ali=pd.read_csv('支付宝.csv',skiprows=1,skipfooter=21,encoding='gbk'
,usecols=['交易时间 ','交易对方 ','商品说明 ','收/支 ','金额 ','收/付款方式 '])
# 重命名
ali.rename(columns={
'交易时间 ':'交易时间',
'交易对方 ':'交易对方',
'商品说明 ':'商品',
'收/支 ':'收/支',
'金额 ':'金额(元)',
'收/付款方式 ':'支付方式'},inplace=True)
#添加数据列,为了和微信账单保持一致
ali['当前状态']='成功'
ali['交易类型']='未分类'
ali['账号']='ali'
#重新排序
order =['交易时间','交易类型','交易对方','商品','收/支','金额(元)','支付方式','当前状态','账号']
ali= ali[order]
#数据合并
wec=pd.concat([wecj,ali])
#数据导出
wec.to_excel('result_final.xlsx',index=False)
账单数据分类
这部分感觉还可以继续优化,先将初步的版本放上来:
#新建一个分类列, 默认分类是打工人的主要支出:"饮食购物",
wec['分类']='饮食购物'
#朋友和个人转账,不属于支出的
wec['分类'].loc[wec['交易类型']=='转账']='转账'
根据”交易对方"给每个数据分类
#把对应的商家名称放入列表
transport=['深圳市地铁相关运营主体','滴滴出行','铁路12306']
coffee=['奈雪的茶','喜茶']
shopping=['京东商城平台商户','京东']
food=['美团平台商户','美团']
#根据列表内容给每条数据分类
wec['分类'].loc[wec['交易对方'].isin(transport)]='交通'
wec['分类'].loc[wec['交易对方'].isin(shopping)]='购物'
wec['分类'].loc[wec['交易对方'].isin(coffee)]='咖啡奶茶'
wec['分类'].loc[wec['交易对方'].isin(food)]='外卖'
#查看分类账单明细
wec.loc[wec['分类']=='交通']
#数据导出
wec.to_excel('result_fenlei.xlsx',index=False)
其他的后续想法
- 分类可增加其他的商家,或者使用表格字典,或者读取单独的Excel分类表格,方便管理和使用。
- 退款:不同商家的退款数据记录不一样,可以通过判断交易对方/商品中是否包含"退款",给退款数据打标记
- 支出和收入可以用正负号区别表示
- 将数据导入本地数据库中,形成个人的消费支出数据库,方便整理和汇总。
- 加入可视化分析对比,固化支出的分析流程,直接输出分析报告。
- 使用其他的BI工具,Tableau/PowerBI 也可以实现支出报告自动化生成。