数据分析(财报分析) · 第 1 课
用 pandas 从格力的 6 年真实年报数据里,算出一条指标趋势。
打开终端,敲 4 行代码,得到格力 2020–2025 年每一年的归母净利率,并能说出一句关于趋势的结论。
本课用的是真数据:格力电器(000651)2020–2025 六个年报的关键科目,单位统一为亿元。
文件在 assets/data/000651-格力-年报关键数据.csv,长这样:
年份,营业总收入_亿元,归母净利润_亿元,经营现金流净额_亿元
2020,1705.0,221.8,192.4
2021,1896.5,230.6,18.9
2022,1901.5,245.1,286.7
2023,2050.2,290.2,564.0
2024,1900.4,321.8,293.7
2025,1711.2,290.0,463.8
来源:东方财富财务摘要,经 AKShare 1.15.87 stock_financial_abstract 导出,导出日 2026-09-24。
任何数字的最终裁决地是巨潮资讯网的年报原文。
你在 Excel 里的那张表,在 pandas 里叫 DataFrame。第一行是列名,左边那串 0 1 2 3 4 5 是行号(行号在 pandas 里叫「索引」,index)。
用列名把一列取出来,得到的不是数字,是「一整列」,叫 Series。记住这一点——第 3 个概念就靠它。
这是 pandas 和普通 Python 最不一样的地方,也是它取代 Excel 手工拉公式的原因:
# 两列“对齐着”一起算,一行算完所有年份
df["归母净利率_%"] = df["归母净利润_亿元"] / df["营业总收入_亿元"] * 100
你没写任何 for 循环,但它把 6 个年份全算了。这个特性叫向量化运算,是后面所有指标计算的地基。
Excel 里你要把公式往下拖,表一变就得重拖。这里公式写在列名上,不写在单元格上——以后换成 20 家公司、20 年数据,这行代码一个字都不用改。
cd ~/Learning/数据分析
python3
看到 >>> 就对了。这是交互式 Python,每敲一行立刻看到结果——反馈最快的学习方式。
import pandas as pd
df = pd.read_csv("assets/data/000651-格力-年报关键数据.csv")
df
第二行把 CSV 读成 DataFrame(pd 是 pandas 的通用简称,df 是「dataframe」的习惯命名)。第三行让它显示出来。
你该看到:6 行 4 列,左边有 0–5 的行号。看到这个,说明你已经在用 pandas 了。
# 取一列看看它长什么样
df["营业总收入_亿元"]
# 算归母净利率:造一列新的
df["归母净利率_%"] = (df["归母净利润_亿元"] / df["营业总收入_亿元"] * 100).round(1)
# 只看关心的两列
df[["年份", "归母净利率_%"]]
第 2 步的写法 df["新列名"] = 算式 就是「新增一列」——pandas 里没有「插入列」这种操作,赋值就是新增。这个习惯要改过来。
你的输出应该是:13.0 → 12.2 → 12.9 → 14.2 → 16.9 → 16.9(%)。
然后回答自己一个问题:这六年,格力的净利率在往上还是往下?
报错 FileNotFoundError:说明当前目录不对。终端里敲 pwd 确认是不是 /Users/mac/Learning/数据分析;路径是相对的(assets/…),必须在工作区根目录下运行。
报错 ModuleNotFoundError: No module named 'pandas':用 which python3 确认是 /opt/miniconda3/bin/python3。
数字对不上但差不多:检查是不是漏了 * 100,或者括号套错了位置。
下面三题请凭记忆答。看起来很简单的题才最能暴露「其实没记住」——这就是存储强度的意义。
df["营业总收入_亿元"] 得到的是什么?
不算 for 循环、不逐行处理,那 df["a"] / df["b"] 是怎么算完 6 个年份的?
格力 2025 年的归母净利率是多少?(填数字,保留一位小数)
你现在可以说了:格力 2020–2025 年归母净利率从 13.0% 升到 16.9%,期间收入从 1705 亿先升到 2050 亿、再回落到 1711 亿——但利润率没有跟着掉,反而到了六年最高。
这就是财报分析里最值钱的一句话形态:不是"净利率 16.9%",而是"它在什么背景下变化"。收入下降、利润率反升,本身就值得追问一句为什么(产品结构?成本?还是别的)。
这一课你只算了一个指标,而且只算了一家公司。单点指标不足以支撑结论——要跟同行比、要看好几年、还要看现金流是否跟上(表里第三列就是为下一课准备的)。第 4 课会专门讲"指标对不上/看不懂"时怎么往下查。
下一课预告:不再用手工导出的 CSV——用 akshare 自己拉数据,处理它返回的"横着的宽表"(行是指标、列是报告期),并装上第一道防错:确认你拿到的确实是年报口径。
我是你的老师,卡住就直接问。可以问:某个报错看不懂、某行代码为什么这么写、想多加一列(比如毛利率)该怎么改、或者"这个指标到底该不该这么算"。不用怕问题太基础。