用pandas处理支付宝交易记录,是否有点杀鸡用牛刀?

经常要用“支付宝”帮人买东西,所以每月都有结账问题,支付宝可以导出csv文件,原来一直用EXCEL来处理,但也要花掉不少时间,稍不注意就会出错,在接触PANDAS以后,发现用PANDAS还是可以快不少,但支付宝交易记录里还是有不少看不见的垃圾,不处理掉会有非常多的麻烦,当然PANDAS有很多强大的功能,在这里将一一展示用到的功能:

首先支付宝交易记录基本上长这样:
在EXCEL表里
在这里插入图片描述

实际字符是这样:

支付宝交易记录明细查询
账号:[1234567890123]
起始日期:[2020-11-01 00:00:00]    终止日期:[2021-10-25 10:52:03]
---------------------------------交易记录明细列表------------------------------------
交易号                  ,商家订单号               ,交易创建时间              ,付款时间                ,最近修改时间              ,交易来源地     ,类型              ,交易对方            ,商品名称                ,金额(元)   ,/,交易状态    ,服务费(元)   ,成功退款(元)  ,备注                  ,资金状态     ,
20211025200040011100800057038593	,                    	,2021-10-25 09:27:07 ,2021-10-25 09:27:13 ,2021-10-25 09:27:13 ,支付宝网站     ,即时到账交易          ,小张(张小宝)         ,转账                  ,0.01    ,支出      ,交易成功    ,0.00     ,0.00     ,转账                  ,已支出      ,
2021102522001111111457461862	,21102509220604186130	,2021-10-25 09:22:06 ,2021-10-25 09:22:06 ,2021-10-25 09:22:06 ,其他(包括阿里巴巴和外部商家),即时到账交易          ,上海公共交通卡股份有限公司   ,上海公交-上海公交-2021-10-25 07:21:58,2.00    ,支出      ,交易成功    ,0.00     ,0.00     ,                    ,已支出      ,
2021102522001111111457974809	,39126600004823000003242110253170021402333	,2021-10-25 08:48:20 ,2021-10-25 08:48:20 ,2021-10-25 08:48:20 ,其他(包括阿里巴巴和外部商家),即时到账交易          ,老鸿兴汤包馆          ,老鸿兴芷江路店             ,20.00   ,支出      ,交易成功    ,0.00     ,0.00     ,                    ,已支出      ,

从上面的字符集里可以看到有很多不同长度的空格,这是数据处理时带来麻烦的东西,必须清除。
下面我们通过例子,来向各位展示各个步骤。

一. 读入支付宝交易记录csv文件
在这里我们有两个问题:a. 前面4行说明是个要绕过的障碍;b. 不是所有列对我们都有意义,我们只需要有选择的读入相应的列。

#准备工作
import pandas as pd
import re
from pandas import DataFrame
import numpy as np

#读入支付宝交易记录csv文件,header=4 ->从第5行开始读,一直读到底,usecols=[3,5,6,7,8,9,10,11,14,15] ->只读入这几列,可以根据需求调整,读入命令详细说明

df = pd.read_csv(alipay_file_name.csv, usecols=[3,5,6,7,8,9,10,11,14,15],header=4)

二. 清理交易记录中的空格

df.columns

先用上面这个命令看一下表头里的空格,见下图:
在这里插入图片描述

df_trimmed = df.rename(columns=lambda x: x.strip())

现在清理表头空格,然后表头就干净了,见下图:
在这里插入图片描述用下面命令清理整个表的空格

df_trimmed = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)    # 清理整个表

支付宝交易记录csv文件最尾部还有说明,也必须删除,这也是一条经常用到的命令

df_trimmed.dropna(axis=0, how='all', inplace=True)   # 删除行(行内字段都为空)

三. 对交易记录进行分组归类,用到一些比较高级的技术
a.

utilitybill  = ['上海燃气有限公司','上海城投水务(集团)有限公司','中国电信股份有限公司上海分公司','国网上海市电力公司(缴费)']   #使用这个变量为了,更方便变量的修改,同时让下面的命令更简短
df_trimmed.loc[df_trimmed.交易对方.isin(utilitybill),['类型']]='水电煤话费'  # isin函数,只要里面有一项完全匹配,就给相应的字段'类型'赋值:水电煤话费

在此涉及了不少概念:loc1isin函数 2,条件赋值,(这些概念是为了方便在百度里查询)
在此借用了原来’类型’这列作为分组,通过不同的组合和赋值就可以实现分组。

b.

utilitybill2 = '出租汽车|嘀嗒出行|上海公共交通'   #这是“包括”函数用的变量
df_trimmed.loc[df_trimmed['交易对方'].str.contains(utilitybill2),'类型']='交通费'

此处添加了str.contains函数3,这是非常强大的功能,下图是实际结果:
在这里插入图片描述c.

df_trimmed.loc[((df_trimmed['类型'] == '即时到账交易') & (df_trimmed['金额(元)']>999.99 )) ,'类型']='大额交易'

这是个“和”条件的赋值, 类型= '即时到账交易’表示还没有被赋值过,同时金额(元)大于999.99,这里我们定义为大额交易。

在此可以把自己想要的分组归类都搞定,然后就是排序和输出存档。

四. 排序和输出

df_trimmed = df_trimmed.sort_values(by=["类型","交易对方","金额(元)"],ascending=[False,True,True])   # 三列排序,一列降序,二、三列升序
df_trimmed.to_excel('支付宝交易记录已处理.xlsx')

上面用到的很多命令已经是比较高级的
Pandas 可以是牛刀,也是瑞士军刀!


  1. loc函数说明 ↩︎

  2. isin函数说明 ↩︎

  3. str.constains函数说明 ↩︎

猜你喜欢

转载自blog.csdn.net/weinsheimer/article/details/120985940