👇👇 关注后回复 “进群” ,拉你进程序员交流群 👇👇
大家好,我是小五🐶
相信大部分人对于Python 并非想掌握全栈知识,往往只是为解决工作/生活中的某些问题才开始学习的。
所以我打算写一些文章,介绍我从开始学Python到现在,写过的一些小工具/小技巧。好多都是我现在还在使用的,它们极大地节约了我的时间并提升工作效率。如果大家喜欢,请多多 点赞支持 ,我会继续写这个系列的。
注:文中代码写的较早,可能不太简洁,大家主要理解思路即可
正文开始:
前情回顾 hi,我是小五
不知道大家有没有手动记账的习惯,我大概从大学开始就坚持记账,中途也换过几个账本APP。目前使用的是圈子账本
,它的记账界面如下图所示:
再说说我现在的情况,毕业之后支出越来越多越琐碎,每月的账单多到再手动记账有些过于浪费时间了。
不过有几点让我注意到了,似乎可以实现自动化记账:
一是我目前支出首选信用卡(支付宝、微信也绑定信用卡),几乎全部支出都在这里;
二是圈子账本可以通过上传模板文件来直接上传账单,现在也支持支付宝账单了;
三是我的支出类别比较单一,主要就下面几种:
折中方案 根据上面的几点,我搞了个折中的方案,并一直用到现在。
就是电脑登录信用卡官网,手动复制或者下载账单。
然后使用python调整成账本官网支持的格式,导出成excel格式,直接上传至官网。
下面给大家对比一下操作前和操作后的格式:
信用卡里的账单:
官网规定格式:
操作实战 先手动复制账单到excel里,先命名为测试数据.xlsx
。
然后我们开始使用python处理,导入数据
df = pd.read_excel('测试数据.xlsx' ,header = None ) df.head(6 )
👆每隔三行其实是一条数据,所以我们要跳行提取数据
df2 = pd.DataFrame(columns=['日期' ,'时间' ,'入账金额' ,'交易说明' ]) df2['日期' ] = df.iloc[[ i+1 for i in range(0 ,len(df),3 )],[0 ]].reset_index()[0 ] df2['时间' ] = df.iloc[[ i+2 for i in range(0 ,len(df),3 )],[0 ]].reset_index(drop=True ) df2['入账金额' ] = df.iloc[[ i+1 for i in range(0 ,len(df),3 )],[1 ]].reset_index(drop=True ) df2['交易说明' ] = df.iloc[[ i+2 for i in range(0 ,len(df),3 )],[1 ]].reset_index(drop=True )
创建了一个df2
,并从df
中隔行提取数据,结果如下
调整格式 下一步调整格式,先参考目标格式要求:
df2['时间' ] = df2['日期' ].apply(lambda x : str(x).replace('00:00:00' ,'' )) + df2['时间' ].apply(lambda x : str(x)[:-3 ]) df2['入账金额' ] = df2['入账金额' ].str.lstrip('入账金额:¥' ) df2['交易说明' ] = df2['交易说明' ].str.lstrip('交易说明:财付通公司-' ) df2 = df2.drop(columns = '日期' )
这样我们就调整好了时间
、入账金额(金额)
、交易说明(备注)
,还剩下一个关键的值就是类别,其实我自己的消费类别没几个,可以简单的利用交易说明判断类别,无法分辨的类别归为其他。
def fenlei (comment) : if '美团' in comment or '拉扎斯' in comment: data = "餐饮" elif '花小猪' in comment or '滴滴' in comment: data = "交通" elif '燃气' in comment or '电费' in comment: data = "水电燃气" elif '拼多多' in comment: data = "生活用品" else : data = "其他" return data
利用上面的函数,就可以统计出类别
这一列的值。
其中拉扎斯指的是饿了么,大家查一下自己账单就知道了。至于其他的种类,大家根据自己实际情况改改就可。
另外再添加另外两个固定列,就齐了。
df2['分类' ] = df2.apply(lambda x :fenlei(x['交易说明' ]), axis=1 ) df2 = df2[df2['入账金额' ].astype(float) > 0 ] df2['类型' ] = '支出' df2['账户' ] = '交通银行' df2.head()
👆这里面我还筛选了只大于0的入账金额
,这是为了排除还款记录。
注:还款记录在信用卡账单里是负值
最后结果如下图所示:
导出数据 由于这次导出数据要固定格式,所以使用了openpyxl
来向官网模板中直接写入,这样导入比较规范。
workbook = load_workbook(filename="朱小五.xlsx" ) sheet = workbook.active df2 = df2.iloc[:,[4 ,0 ,3 ,1 ,5 ,2 ]]# 先删除第4行之后的旧数据,预计1000行完全够用 sheet.delete_rows(idx=2 , amount=1000 )# 然后在进行添加数据 for row in df2.values.tolist(): sheet.append(row) print(row) print("已经保存到文件中" ) workbook.save(filename="朱小五.xlsx" ) workbook.close()
打开朱小五.xlsx
,查看结果
没什么问题,将Excel
导入账本官网中
以上就是小五平时利用Python 自动化处理自己账本的全部内容了。
如果喜欢我的文章,记得点赞支持哦~