hi,我是曾子
不知道大家有沒(méi)有手動(dòng)記賬的習(xí)慣,我大概從大學(xué)開始就堅(jiān)持記賬,中途也換過(guò)幾個(gè)賬本APP。目前使用的是圈子賬本,它的記賬界面如下圖所示:
再說(shuō)說(shuō)我現(xiàn)在的情況,畢業(yè)之后支出越來(lái)越多越瑣碎,每月的賬單多到再手動(dòng)記賬有些過(guò)于浪費(fèi)時(shí)間了。
不過(guò)有幾點(diǎn)讓我注意到了,似乎可以實(shí)現(xiàn)自動(dòng)化記賬:
一是我目前支出首選信用卡(支付寶、微信也綁定信用卡),幾乎全部支出都在這里;
二是圈子賬本可以通過(guò)上傳模板文件來(lái)直接上傳賬單,現(xiàn)在也支持支付寶賬單了;
三是我的支出類別比較單一,主要就下面幾種:
根據(jù)上面的幾點(diǎn),我搞了個(gè)折中的方案,并一直用到現(xiàn)在。
就是電腦登錄信用卡官網(wǎng),手動(dòng)復(fù)制或者下載賬單。
然后使用python調(diào)整成賬本官網(wǎng)支持的格式,導(dǎo)出成excel格式,直接上傳至官網(wǎng)。
下面給大家對(duì)比一下操作前和操作后的格式:
信用卡里的賬單:
官網(wǎng)規(guī)定格式:
先手動(dòng)復(fù)制賬單到excel里,先命名為測(cè)試數(shù)據(jù).xlsx。
然后我們開始使用python處理,導(dǎo)入數(shù)據(jù)
df = pd.read_excel('測(cè)試數(shù)據(jù).xlsx',header = None)
df.head(6)
每隔三行其實(shí)是一條數(shù)據(jù),所以我們要跳行提取數(shù)據(jù)
df2 = pd.DataFrame(columns=['日期','時(shí)間','入賬金額','交易說(shuō)明'])
df2['日期'] = df.iloc[[ i+1 for i in range(0,len(df),3)],[0]].reset_index()[0]
df2['時(shí)間'] = 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['交易說(shuō)明'] = df.iloc[[ i+2 for i in range(0,len(df),3)],[1]].reset_index(drop=True)
創(chuàng)建了一個(gè)df2,并從df中隔行提取數(shù)據(jù),結(jié)果如下
下一步調(diào)整格式,先參考目標(biāo)格式要求:
df2['時(shí)間'] = df2['日期'].apply(lambda x : str(x).replace('00:00:00','')) + df2['時(shí)間'].apply(lambda x : str(x)[:-3])
df2['入賬金額'] = df2['入賬金額'].str.lstrip('入賬金額:¥')
df2['交易說(shuō)明'] = df2['交易說(shuō)明'].str.lstrip('交易說(shuō)明:財(cái)付通公司-')
df2 = df2.drop(columns = '日期')
這樣我們就調(diào)整好了時(shí)間、入賬金額(金額)、交易說(shuō)明(備注),還剩下一個(gè)關(guān)鍵的值就是類別,其實(shí)我自己的消費(fèi)類別沒(méi)幾個(gè),可以簡(jiǎn)單的利用交易說(shuō)明判斷類別,無(wú)法分辨的類別歸為其他。
def fenlei(comment):
if '美團(tuán)' in comment or '拉扎斯'in comment:
data = '餐飲' elif '花小豬'in comment or '滴滴'in comment:
data = '交通' elif '燃?xì)?in comment or '電費(fèi)'in comment:
data = '水電燃?xì)? elif '拼多多'in comment:
data = '生活用品' else:
data = '其他' return data
利用上面的函數(shù),就可以統(tǒng)計(jì)出類別這一列的值。
其中拉扎斯指的是餓了么,大家查一下自己賬單就知道了。至于其他的種類,大家根據(jù)自己實(shí)際情況改改就可。
另外再添加另外兩個(gè)固定列,就齊了。
df2['分類'] = df2.apply(lambda x :fenlei(x['交易說(shuō)明']), axis=1)
df2 = df2[df2['入賬金額'].astype(float) > 0]
df2['類型'] = '支出'df2['賬戶'] = '交通銀行'df2.head()
這里面我還篩選了只大于0的入賬金額,這是為了排除還款記錄。
注:還款記錄在信用卡賬單里是負(fù)值
最后結(jié)果如下圖所示:
由于這次導(dǎo)出數(shù)據(jù)要固定格式,所以使用了openpyxl來(lái)向官網(wǎng)模板中直接寫入,這樣導(dǎo)入比較規(guī)范。
workbook = load_workbook(filename='朱小五.xlsx')
sheet = workbook.active
df2 = df2.iloc[:,[4,0,3,1,5,2]]# 先刪除第4行之后的舊數(shù)據(jù),預(yù)計(jì)1000行完全夠用sheet.delete_rows(idx=2, amount=1000)# 然后在進(jìn)行添加數(shù)據(jù)for row in df2.values.tolist():
sheet.append(row)
print(row)
print('已經(jīng)保存到文件中')
workbook.save(filename='朱小五.xlsx')
workbook.close()
打開朱小五.xlsx,查看結(jié)果
沒(méi)什么問(wèn)題,將Excel導(dǎo)入賬本官網(wǎng)中
完美導(dǎo)入
再打開手機(jī)記賬APP
發(fā)現(xiàn)賬單已經(jīng)安安靜靜地躺在賬本里啦!
以上就是小五平時(shí)利用Python自動(dòng)化處理自己賬本的全部?jī)?nèi)容了。
如果喜歡我的文章,記得點(diǎn)贊支持哦~
聯(lián)系客服