Python改善生活 | 輕松實現(xiàn)APP自動化記賬
前情回顧
hi,我是小五
不知道大家有沒有手動記賬的習慣,我大概從大學開始就堅持記賬,中途也換過幾個賬本APP。目前使用的是圈子賬本,它的記賬界面如下圖所示:

再說說我現(xiàn)在的情況,畢業(yè)之后支出越來越多越瑣碎,每月的賬單多到再手動記賬有些過于浪費時間了。
不過有幾點讓我注意到了,似乎可以實現(xiàn)自動化記賬:
一是我目前支出首選信用卡(支付寶、微信也綁定信用卡),幾乎全部支出都在這里;
二是圈子賬本可以通過上傳模板文件來直接上傳賬單,現(xiàn)在也支持支付寶賬單了;

三是我的支出類別比較單一,主要就下面幾種:

折中方案
根據(jù)上面的幾點,我搞了個折中的方案,并一直用到現(xiàn)在。
就是電腦登錄信用卡官網(wǎng),手動復制或者下載賬單。
然后使用python調整成賬本官網(wǎng)支持的格式,導出成excel格式,直接上傳至官網(wǎng)。
下面給大家對比一下操作前和操作后的格式:
信用卡里的賬單:

官網(wǎng)規(guī)定格式:

操作實戰(zhàn)
先手動復制賬單到excel里,先命名為測試數(shù)據(jù).xlsx。

然后我們開始使用python處理,導入數(shù)據(jù)
df = pd.read_excel('測試數(shù)據(jù).xlsx',header = None)
df.head(6)

??每隔三行其實是一條數(shù)據(jù),所以我們要跳行提取數(shù)據(jù)
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)
創(chuàng)建了一個df2,并從df中隔行提取數(shù)據(jù),結果如下

調整格式
下一步調整格式,先參考目標格式要求:

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
利用上面的函數(shù),就可以統(tǒng)計出類別這一列的值。
其中拉扎斯指的是餓了么,大家查一下自己賬單就知道了。至于其他的種類,大家根據(jù)自己實際情況改改就可。
另外再添加另外兩個固定列,就齊了。
df2['分類'] = df2.apply(lambda x :fenlei(x['交易說明']), axis=1)
df2 = df2[df2['入賬金額'].astype(float) > 0]
df2['類型'] = '支出'
df2['賬戶'] = '交通銀行'
df2.head()
??這里面我還篩選了只大于0的入賬金額,這是為了排除還款記錄。
注:還款記錄在信用卡賬單里是負值
最后結果如下圖所示:

導出數(shù)據(jù)
由于這次導出數(shù)據(jù)要固定格式,所以使用了openpyxl來向官網(wǎng)模板中直接寫入,這樣導入比較規(guī)范。
workbook = load_workbook(filename="朱小五.xlsx")
sheet = workbook.active
df2 = df2.iloc[:,[4,0,3,1,5,2]]
# 先刪除第4行之后的舊數(shù)據(jù),預計1000行完全夠用
sheet.delete_rows(idx=2, amount=1000)
# 然后在進行添加數(shù)據(jù)
for row in df2.values.tolist():
sheet.append(row)
print(row)
print("已經(jīng)保存到文件中")
workbook.save(filename="朱小五.xlsx")
workbook.close()
打開朱小五.xlsx,查看結果

沒什么問題,將Excel導入賬本官網(wǎng)中



以上就是小五平時利用Python自動化處理自己賬本的全部內容了。
如果喜歡我的文章,記得點贊支持哦~
