萌狼蓝天情景还原:
支付宝/微信导出的账单,不管支出还是收入都是正数。
我想把支出的金额改成负数,其他不变就这样。
解决办法
这里用到的是pandas.apply
e……下面的写法虽然比较麻烦,但是 这是比较好理解的写法,你理解之后可以把他写简单点。
data=data.apply(debuff,axis=1)
- data是你读入的数据,比如
data=pd.read_excel(FilePath)
- debuff是自定函数名,你自己随便取,后面我们要写这个函数的。
- axis=1 表示一行一行的取
然后就是写debuff
这个函数
def debuff(c): # 这个c自己想写啥名就啥名,代表一行数据 # c["收/支"] 表示取出这一行"收/支"这一列的值 # .strip是取出空白字符 if c["收/支"].strip() == "支出": # 如果是支出,就改为负数 c['金额'] = -c['金额'] # 改好后记得将数据return回去 return c else: # 如果不是支出,那直接return回去即可 return c
完毕!
在此顺便记录几个常用代码写法:
1.不重复取出一列的值data[列名].unique()
或者data[列名].value_counts(sort=False)
2.对取出的列值进行格式处理
# 这个示例是去掉空白字符 odata_jiaoyifenlei = odata["交易分类"].unique() odata_jiaoyifenlei = [i.replace(" ","") for i in odata_jiaoyifenlei]
3.根据某列不重复值合计金额
`data.groupby(["交易类型"],sort=False).sum("金额")["金额"]