利用python将资产负债表和利润表编制为资产资本表

       为了更准确反映公司的经营活动情况,重构后的资产不再按照流动性分类,而是按照带来经济利益的方式及分类。

        这类重复的工作利用python来简化,写好代码以后,后续的只需要输入股票代码,需要的报表日期,即可直接获得数据,数据接口用的tushare。

① 计算出金融资产:

def get_finacial_data(code, start, end):
    finacial = pro.balancesheet(ts_code=code, start_date=start, end_date=end,
                          fields='end_date,money_cap,trad_asset,hfs_assets,nca_within_1y,'
                                 'decr_in_disbur,fa_avail_for_sale,htm_invest,invest_real_estate,'
                                 'div_receiv,pur_resale_fa,int_receiv')\
        .rename(columns={'end_date': '项目', 'money_cap': '货币资金', 'trad_asset': '交易性金融资产',
                         'hfs_assets': '持有待售的资产', 'nca_within_1y': '一年内到期的非流动资产',
                         'decr_in_disbur': '发放贷款及垫款', 'fa_avail_for_sale': '可供出售金融资产',
                         'htm_invest': '持有至到期投资', 'invest_real_estate': '投资性房地产',
                         'div_receiv': '应收股利', 'pur_resale_fa': '买入返售金融资产',
                         'int_receiv': '应收利息'})
    finacial2 = finacial.drop_duplicates().set_index('项目')   # 去掉完全重复行,并且将日期设置为索引行
    finacial3 = finacial2.T.fillna(0)   # 将空值替换为0
    row_sum = finacial3.sum(axis=0)
    finacial3.loc['金融资产合计'] = row_sum   # 将列的求和加入到原DataFrame
    return finacial3

② 计算出长期股权投资

def get_long_term_equity_data(code, start, end):
    long_term_equity = pro.balancesheet(ts_code=code, start_date=start, end_date=end,
                                    fields='end_date,lt_eqt_invest') \
        .rename(columns={'end_date': '项目', 'lt_eqt_invest': '长期股权投资'})
    long_term_equity2 = long_term_equity.drop_duplicates().set_index('项目')  # 去掉完全重复行,并且将日期设置为索引行
    long_term_equity3 = long_term_equity2.T.fillna(0)  # 将空值替换为0
    return long_term_equity3

③ 计算出周转性经营投入 = 营运资产 - 营运负债

def get_turnover_operating_data(code, start, end):
    # 营运资产小计 属于资产,相加
    turnover_add = pro.balancesheet(ts_code=code, start_date=start, end_date=end,
                          fields='end_date,notes_receiv,accounts_receiv,prepayment,oth_receiv,inventories,'
                                 'oth_cur_assets,lt_rec')\
        .rename(columns={'end_date': '项目', 'notes_receiv': '应收票据', 'accounts_receiv': '应收账款',
                         'prepayment': '预付款项', 'oth_receiv': '其他应收款',
                         'inventories': '存货', 'oth_cur_assets': '其他流动资产',
                         'lt_rec': '长期应收款'})
    turnover_add2 = turnover_add.drop_duplicates().set_index('项目')   # 去掉完全重复行,并且将日期设置为索引行
    turnover_add3 = turnover_add2.T.fillna(0)   # 将空值替换为0
    row_sum = turnover_add3.sum(axis=0)
    turnover_add3.loc['营运资产小计'] = row_sum   # 将列的求和加入到原DataFrame

    # 营运负债小计
    turnover_reduce = pro.balancesheet(ts_code=code, start_date=start, end_date=end,
                                       fields='end_date,notes_payable,acct_payable,adv_receipts,comm_payable,'
                                              'payroll_payable,taxes_payable,oth_payable,lt_payroll_payable,'
                                              'estimated_liab,deferred_inc,defer_inc_non_cur_liab,'
                                              'specific_payables,oth_cur_liab,oth_ncl') \
        .rename(columns={'end_date': '项目', 'notes_payable': '应付票据', 'acct_payable': '应付账款',
                         'adv_receipts': '预收款项', 'comm_payable': '应付手续费及佣金',
                         'payroll_payable': '应付职工薪酬', 'taxes_payable': '应交税费',
                         'oth_payable': '其他应付款', 'lt_payroll_payable': '长期应付职工薪酬',
                         'estimated_liab': '预计负债', 'deferred_inc': '递延收益-流动负债',
                         'defer_inc_non_cur_liab': '递延收益-非流动负债','specific_payables': '专项应付款',
                         'oth_cur_liab': '其他流动负债', 'oth_ncl': '其他非流动负债'})
    turnover_reduce2 = turnover_reduce.drop_duplicates().set_index('项目')  # 去掉完全重复行,并且将日期设置为索引行
    turnover_reduce3 = turnover_reduce2.T.fillna(0)  # 将空值替换为0
    row_sum1 = turnover_reduce3.sum(axis=0)
    turnover_reduce3.loc['营运负债小计'] = row_sum1  # 将列的求和加入到原DataFrame
    # 计算:周转性经营投入 = 营运资产 - 营运负债
    turnover_operating = pd.concat([turnover_add3, turnover_reduce3])
    turnover_operating.loc['周转性经营投入合计'] = turnover_operating.loc['营运资产小计'] - turnover_operating.loc['营运负债小计']
    return turnover_operating

④ 计算出长期经营资产:

def get_long_turnove_data(code, start, end):
    long_turnove = pro.balancesheet(ts_code=code, start_date=start, end_date=end,
                                    fields='end_date,fix_assets,cip,const_materials,fixed_assets_disp,'
                                           'produc_bio_assets,oil_and_gas_assets,intan_assets,'
                                           'r_and_d,goodwill,lt_amor_exp,defer_tax_assets,defer_tax_liab,'
                                           'oth_nca') \
        .rename(columns={'end_date': '项目', 'fix_assets': '固定资产', 'cip': '在建工程',
                         'const_materials': '工程物资', 'fixed_assets_disp': '固定资产清理',
                         'produc_bio_assets': '生产性生物资产', 'oil_and_gas_assets': '油气资产',
                         'intan_assets': '无形资产', 'r_and_d': '研发支出', 'goodwill': '商誉',
                         'lt_amor_exp': '长期待摊费用', 'defer_tax_assets': '递延所得税资产',
                         'defer_tax_liab': '减:递延所得税负债', 'oth_nca': '其他非流动资产'})
    long_turnove2 = long_turnove.drop_duplicates().set_index('项目')  # 去掉完全重复行,并且将日期设置为索引行
    long_turnove3 = long_turnove2.T.fillna(0)  # 将空值替换为0
    row_sum = long_turnove3.sum(axis=0)
    long_turnove3.loc['长期经营资产合计'] = row_sum - long_turnove3.loc['减:递延所得税负债'] * 2 # 将列的求和加入到原DataFrame
    return long_turnove3

 ⑤ 计算出经营资产 = 周转性经营投入 + 长期经营资产

⑥ 计算出资产总额 = 金融资产 + 长期股权投资 + 经营资产

def get_sum_assets_result_data(code, start, end):
    # 获取 金融资产 数据
    result_finacial = get_finacial_data(code, start, end)
    # result_finacial.to_csv('../data/金融资产.csv')

    # 获得周转性经营资产数据
    result_turnover = get_turnover_operating_data(code, start, end)
    # result_turnover.to_csv('../data/周转性经营投入.csv')

    # 获得 长期经营资产 数据
    result_long_turnove = get_long_turnove_data(code, start, end)
    # result_long_turnove.to_csv('../data/长期经营资产.csv')

    # 计算 经营资产 = 周转性经营资产 + 长期经营资产
    operating_assets = pd.concat([result_turnover, result_long_turnove])
    operating_assets.loc['经营资产合计'] = operating_assets.loc['周转性经营投入合计'] + operating_assets.loc['长期经营资产合计']
    # operating_assets.to_csv('../data/经营资产.csv')

    # 获得 长期股权投资 数据
    result_long_term = get_long_term_equity_data(code, start, end)

    # 计算 资本总额 数据
    sum_assets_result = pd.concat([result_finacial, result_long_term, operating_assets])
    sum_assets_result.loc['资产总额'] = sum_assets_result.loc['金融资产合计'] + \
                                sum_assets_result.loc['长期股权投资'] + sum_assets_result.loc['经营资产合计']
    sum_assets_result.to_csv('../data/' + code +'资本总额.csv')
    return  sum_assets_result

 案例:以德赛西威的2019年~2022年的年报编制资产表

欢迎喜欢财务分析的小伙伴一起讨论,一起学习~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值