欢迎光临散文网 会员登陆 & 注册

出纳银行、现金日记账用pandas实现财务自动化的功能和一些思路

2020-10-16 16:54 作者:学的很杂的一个人  | 我要投稿

视频讲解请看这里:https://www.bilibili.com/video/BV1CD4y1d7W6/


        由于今年疫情和公司环境的变化,公司安排我兼任出纳职位,我本来是搞工程技术的,现在又要兼顾出纳岗位,对财务的东西基本没有什么了解,可以说是一窍不通,小公司为了生存没办法,我只能硬着头皮接下来了,正式交接后才发现工作量不小,发工资、报销费用、收付工程账款、农民工工资发放,社保、医保、还要记账,我看了交接的财务资料一天…懵逼了!

        先从日常简单重复的看起,看看能不能用电脑实现一些自动化的操作,解放我的时间,目前有两本手写账簿,一个是《现金日记账》一个是《银行日记账》,摸索了一下,这两个相当于本质上就是出入库账本,就是动钱的时候就要做记录,按月统计余额、收付款数目。那先从这个入手,这两个账本就用python的pandas库来把纸质记录电子化程序化吧。

先看看这两本账的格式,大概都长这个样子,封面不同:

     先把数据做成下面的格式,保存成csv文件或者电子表格文件也行,我下面得代码是读取csv格式的:

       目前实现的是按月现金类统计(在每个月最后一行添加统计数据,在余额列逐行计算并写入余额),python代码如下:

import pandas as pd

import numpy as py

import datetime#日期计算库

import calendar#日期计算库

 

 

def cumsum_data(datax):

    data = datax.copy()#拷贝一份,否则赋值会有警告

    data.loc[:,"余额"] = data["借方"].cumsum(0) - data["贷方"].cumsum(0) + data["余额"].cumsum(0)#各项的累计:借方-贷方+余额计算出当前余额

    jief = data["借方"].sum()

    daif = data["贷方"].sum()

    ye = jief - daif + data['余额'][0]

    #获得数据最后一条得日期

    ti = data.index[-1]

    # 获取当月第一天的星期和当月的总天数

    firstDayWeekDay, monthRange = calendar.monthrange(ti.year, ti.month)

    #获取当月最后一天

    lastDay = datetime.date(year=ti.year, month=ti.month, day=monthRange)

    # 计算出下个月第一天

    next_month = lastDay + datetime.timedelta(days=1)

    next_month = pd.to_datetime(next_month)#转换数据格式

    total = pd.DataFrame([{'日期':next_month,'交易类型':'现金','经办人':'-','凭据编号':'-','摘要':str(data.index.month[-1]) + '月合计','借方':jief,'贷方':daif,'余额':ye}]).set_index('日期')#计算合计行

    total1 = pd.DataFrame([{'日期':next_month,'交易类型':'现金','经办人':'-','凭据编号':'-','摘要':str(data.index.month[-1]) + '月余额','借方':0,'贷方':0,'余额':ye}]).set_index('日期')#计算余额行,用于下个月计算

    data = data.append(total)#在结尾添加合计行

    return data,total1

 

 

 

#df  = pd.read_excel('test.xlsx')

df = pd.read_csv('data.csv', encoding = 'gbk')

df['日期'] = pd.to_datetime(df['日期']) #将数据类型转换为日期类型

df = df.fillna(0)

df = df.set_index('日期')

month = list(set(df.index.month)) #利用集函数提取月份,不重复

df_month = df['2020-' + str(month[0])]#df['2020-9']

df_cash = df_month[df_month['交易类型'] == '现金']

df_process,total1 = cumsum_data(df_cash)#计算余额跟合计行

for m in month[1:]:

    df_month = df['2020-' + str(m)]#原始数据读取下个月数据

    df_cash = df_month[df_month['交易类型'] == '现金']#现金流

    df_cash = total1.append(df_cash)#在结尾添加新月份数据

    df_process1,total1 = cumsum_data(df_cash)#计算余额跟合计行

    df_process = df_process.append(df_process1[1:])#在结尾添加新月份数据,丢弃第一行再合并

 

df_process.to_csv('现金日记账.csv',encoding = 'gbk')

df_process

 

输出如下(并根据输出的数据保存一份“现金日记账.csv”的文件):



出纳银行、现金日记账用pandas实现财务自动化的功能和一些思路的评论 (共 条)

分享到微博请遵守国家法律