每个季度结束,老板都会问同一个问题:“咱们公司财务状况到底怎么样?哪里有问题?哪里有机会?”
每次听到这个问题,小王都要花整整一天时间——打开七八个Excel表格,手动拉公式,做透视表,画图表……等到终于把数据整理出来,老板已经等得不耐烦了。
学会用Python做财务诊断后,
10分钟,从原始数据到一份完整的财务诊断报告,包含盈利能力、偿债能力、运营效率、现金流分析,全部搞定。
今天,我就把这套方法分享出来,让更多财务人告别“手动报表地狱”。
财务诊断到底诊什么
在动手写代码之前,我们先搞清楚一个问题:老板说的“财务诊断”,到底想看什么?
一般来说,财务诊断主要看四个方面:
盈利能力:公司赚钱吗?利润率怎么样?
偿债能力:公司欠的钱能还上吗?
运营效率:资金周转快不快?存货压不压?
现金流:账上有钱吗?钱从哪来花哪去了?
以前,这些指标需要从不同Excel表中手动计算,现在,我们用Python一行代码就能搞定一个指标。

准备数据
假设我们手上有这样几份Excel表:
当然,实际工作中你可能只有一张流水表,但为了演示完整,我们用三张表来说明。
用Python读取这些表,只需要几行代码:
是不是超级简单?接下来,我们就可以开始“诊断”了。
盈利能力诊断:公司到底赚不赚钱
盈利能力是老板最关心的。我们用Python快速计算几个核心指标:# 从利润表中提取关键数据revenue = income.loc['营业收入', '本期金额']cost = income.loc['营业成本', '本期金额']net_profit = income.loc['净利润', '本期金额']# 计算毛利率和净利率gross_margin = (revenue - cost) / revenue * 100net_margin = net_profit / revenue * 100print(f"📈 盈利能力诊断")print(f"营业收入:{revenue:,.0f} 元")print(f"毛利率:{gross_margin:.1f}%")print(f"净利率:{net_margin:.1f}%")
如果毛利率高但净利率低,说明期间费用(销售、管理、财务费用)太高了,需要控制成本。
如果两个都低,那问题就比较严重了——公司可能根本没赚钱。

偿债能力诊断:欠的钱能还上吗?
偿债能力关系到公司会不会“暴雷”。我们计算两个经典指标:流动比率和资产负债率:# 从资产负债表中提取数据current_assets = balance.loc['流动资产合计', '期末余额']current_liabilities = balance.loc['流动负债合计', '期末余额']total_assets = balance.loc['资产总计', '期末余额']total_liabilities = balance.loc['负债总计', '期末余额']# 计算偿债能力指标current_ratio = current_assets / current_liabilitiesdebt_ratio = total_liabilities / total_assets * 100print(f"\n💰 偿债能力诊断")print(f"流动比率:{current_ratio:.2f}(一般认为2以上比较安全)")print(f"资产负债率:{debt_ratio:.1f}%(一般认为50%-70%较合理)")
流动比率低于1,意味着流动资产不够还短期负债,资金链可能紧张。资产负债率超过80%,说明公司“债台高筑”,风险较大。运营效率诊断:资金转得快不快?
运营效率决定了公司用同样的钱能做多少生意。我们计算存货周转天数和应收账款周转天数:# 从利润表和资产负债表中提取数据cost_of_sales = income.loc['营业成本', '本期金额']inventory = balance.loc['存货', '期末余额']receivables = balance.loc['应收账款', '期末余额']revenue = income.loc['营业收入', '本期金额']# 计算周转率inventory_turnover = cost_of_sales / inventoryreceivables_turnover = revenue / receivables# 换算成天数inventory_days = 365 / inventory_turnoverreceivables_days = 365 / receivables_turnoverprint(f"\n⚙️ 运营效率诊断")print(f"存货周转天数:{inventory_days:.0f} 天")print(f"应收账款周转天数:{receivables_days:.0f} 天")
存货周转天数越长,说明货卖得越慢,积压资金越多。应收账款天数越长,说明回款越慢,容易被客户“压账”。
如果这两个数字都在变长,说明公司的运营效率在下降,得赶紧找原因。
现金流诊断:钱从哪来,花哪去了?
利润是“纸面富贵”,现金流才是真金白银。我们看一下经营活动的现金流。# 从现金流量表中提取数据operating_cf = cashflow.loc['经营活动现金流量净额', '本期金额']investing_cf = cashflow.loc['投资活动现金流量净额', '本期金额']financing_cf = cashflow.loc['筹资活动现金流量净额', '本期金额']print(f"\n💵 现金流诊断")print(f"经营活动现金流:{operating_cf:,.0f} 元")print(f"投资活动现金流:{investing_cf:,.0f} 元")print(f"筹资活动现金流:{financing_cf:,.0f} 元")# 简单判断if operating_cf > 0: print("✅ 经营现金流为正,主业能造血,不错!")else: print("⚠️ 经营现金流为负,主业在烧钱,需要警惕!")
如果经营现金流长期为负,即便账面上有利润,也可能是“虚胖”——靠赊销撑起来的收入,钱根本没回来。一键生成诊断报告
光在控制台打印还不够,我们把这些诊断结果全部写进一个Excel报告里:# 构建诊断报告数据diagnosis_data = { '诊断维度': ['盈利能力', '盈利能力', '偿债能力', '偿债能力', '运营效率', '运营效率', '现金流'], '指标名称': ['毛利率', '净利率', '流动比率', '资产负债率', '存货周转天数', '应收账款周转天数', '经营现金流'], '数值': [gross_margin, net_margin, current_ratio, debt_ratio, inventory_days, receivables_days, operating_cf], '单位': ['%', '%', '倍', '%', '天', '天', '元']}diagnosis_df = pd.DataFrame(diagnosis_data)# 保存为Exceldiagnosis_df.to_excel('财务诊断报告.xlsx', index=False)print("\n✅ 财务诊断报告已生成:财务诊断报告.xlsx")
打开这个Excel,所有核心指标一目了然,直接拿去给老板汇报。写在最后
从最开始的自动化对账,到一键生成月度报表,再到今天的财务诊断,我们已经走了很远。如果你还没开始,不妨从今天这篇文章开始,试试用Python做一次财务诊断。
好了,今天就聊到这儿,咱们下回见。
觉得文章对你有帮助的话,记得点个赞、转发、收藏喔!