使用AkShare获取股票报表
文章目录
- 使用AkShare获取股票报表
- 业绩报表
- 调用代码
- 多年份数据整合
- 总结
使用AkShare获取股票报表
akshare可以通过东方财富的接口获得股票报表列表:
业绩报表
-
接口: stock_yjbb_em
-
目标地址: http://data.eastmoney.com/bbsj/202003/yjbb.html
-
描述: 东方财富-数据中心-年报季报-业绩报表
-
限量: 单次获取指定 date 的业绩报告数据
-
输入参数
名称 | 类型 | 描述 |
---|---|---|
date | str | date=“20200331”; 可选 {“XXXX0331”, “XXXX0630”, “XXXX0930”, “XXXX1231”}; 从 20100331 开始 |
- 输出参数
名称 | 类型 | 描述 |
---|---|---|
序号 | int64 | - |
股票代码 | object | - |
股票简称 | object | - |
每股收益 | float64 | 注意单位: 元 |
营业总收入-营业总收入 | float64 | 注意单位: 元 |
营业总收入-同比增长 | float64 | 注意单位: % |
营业总收入-季度环比增长 | float64 | 注意单位: % |
净利润-净利润 | float64 | 注意单位: 元 |
净利润-同比增长 | float64 | 注意单位: % |
净利润-季度环比增长 | float64 | 注意单位: % |
每股净资产 | float64 | 注意单位: 元 |
净资产收益率 | float64 | 注意单位: % |
每股经营现金流量 | float64 | 注意单位: 元 |
销售毛利率 | float64 | 注意单位: % |
所处行业 | object | - |
最新公告日期 | object | - |
调用代码
以下为调用代码示例:
import akshare as ak
import datetime
curr_year = datetime.datetime.now().year
# 构造年报日期
report_date = f"{curr_year-1}1231"
stock_yjbb_em_df = ak.stock_yjbb_em(date=report_date)
print(stock_yjbb_em_df)
0%| | 0/24 [00:00<?, ?it/s]序号 股票代码 股票简称 每股收益 营业总收入-营业总收入 营业总收入-同比增长 营业总收入-季度环比增长 \
0 1 874774 里得科技 1.0300 3.966731e+08 14.658311 NaN
1 2 874772 腾信精密 3.1400 7.142117e+08 0.460457 NaN
2 3 874718 百诺医药 2.0000 5.784967e+08 19.838951 NaN
3 4 874709 华大海天 1.1500 5.369850e+08 6.423674 NaN
4 5 874545 永盛高纤 0.0500 2.831473e+08 -25.466174 NaN
... ... ... ... ... ... ... ...
11542 11543 874085 锦华新材 2.1525 1.239482e+09 11.213219 -17.0253
11543 11544 871326 武侯高新 0.2200 3.183500e+08 2.735192 NaN
11544 11545 300803 指南针 0.2500 1.528742e+09 37.370000 225.1024
11545 11546 300708 聚灿光电 0.3000 2.759555e+09 11.230908 7.0525
11546 11547 838284 时代华商 0.3900 5.818418e+07 -46.821828 NaN 净利润-净利润 净利润-同比增长 净利润-季度环比增长 每股净资产 净资产收益率 每股经营现金流量 \
0 6.568990e+07 16.980000 NaN 10.158670 10.71 2.043845
1 1.886075e+08 9.239468 NaN 13.484646 26.45 4.127774
2 1.590960e+08 18.180609 NaN 6.236543 NaN 1.570766
3 6.346681e+07 -25.628923 NaN 8.903370 13.86 0.617886
4 8.162482e+06 -74.384303 NaN 1.586115 NaN 0.135808
... ... ... ... ... ... ...
11542 2.109411e+08 22.280000 38.5995 8.598603 28.19 0.903287
11543 6.542755e+07 -2.660000 NaN 11.287002 1.99 0.417517
11544 1.041971e+08 43.500000 451.0767 5.442976 5.27 10.853801
11545 1.955931e+08 61.440000 -22.5131 4.017735 7.28 0.775635
11546 1.293323e+07 3.020000 NaN 1.958399 20.53 -0.198299 销售毛利率 所处行业 最新公告日期
0 41.522826 None 2025-06-25
1 43.191094 None 2025-06-25
2 75.561990 None 2025-06-25
3 23.155068 None 2025-06-25
4 15.088624 None 2025-06-25
... ... ... ...
11542 27.937141 None 2025-02-10
11543 50.375456 None 2025-01-27
11544 85.688932 软件开发 2025-01-25
11545 13.695617 光学光电子 2025-01-25
11546 56.468237 None 2025-01-24 [11547 rows x 16 columns]
# 保存数据
stock_yjbb_em_df.to_excel("stock_yjbb_em.xlsx", index=False)
多年份数据整合
通过获取多个年份的数据,与个股基本信息融合,可以得到股票多年的业绩情况。
# 读取Excel文件
import pandas as pd# 读取个股基本信息表,股票代码为字符串类型
basic_info_df = pd.read_excel("个股基本信息表.xlsx", dtype={"股票代码": str})curr_year = datetime.datetime.now().yearbasic_report_df = basic_info_df.copy()
# 获取过去10年的年报数据
for year in range(curr_year - 10, curr_year):report_date = f"{year}1231"stock_yjbb_em_df = ak.stock_yjbb_em(date=report_date)yearly_data_df = stock_yjbb_em_df[["股票代码", "营业总收入-营业总收入", "净利润-净利润"]].drop_duplicates()yearly_data_df.rename(columns={"营业总收入-营业总收入": f"营业总收入_{year}","净利润-净利润": f"净利润_{year}"}, inplace=True)# 左连接融合数据basic_report_df = pd.merge(basic_report_df, yearly_data_df, on="股票代码", how="left")# 保存数据到Excel
basic_report_df.to_excel("个股近十年业绩数据.xlsx", index=False)
0%| | 0/19 [00:00<?, ?it/s]0%| | 0/20 [00:00<?, ?it/s]0%| | 0/21 [00:00<?, ?it/s]0%| | 0/22 [00:00<?, ?it/s]0%| | 0/22 [00:00<?, ?it/s]0%| | 0/23 [00:00<?, ?it/s]0%| | 0/23 [00:00<?, ?it/s]0%| | 0/24 [00:00<?, ?it/s]0%| | 0/24 [00:00<?, ?it/s]0%| | 0/24 [00:00<?, ?it/s]
basic_report_df
股票代码 | 股票名称 | 公司ID | 公司名称 | 公司简称 | 公司英文名称 | 公司英文简称 | 主营业务 | 经营范围 | 地区编码 | ... | 营业总收入_2020 | 净利润_2020 | 营业总收入_2021 | 净利润_2021 | 营业总收入_2022 | 净利润_2022 | 营业总收入_2023 | 净利润_2023 | 营业总收入_2024 | 净利润_2024 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 920088 | 科力股份 | T003003664 | 新疆科力新技术发展股份有限公司 | 科力股份 | Xinjiang Keli New Technology Development Co.,Ltd. | NaN | 油田生产过程中的技术服务、方案设计、油田化学助剂产品和油田专用设备的生产与销售。 | 道路普通货物运输;总险货物运输;与石油天然气开采有关的辅助活动;化工产品、机械设备生产、... | 650203.0 | ... | 3.121663e+08 | 3.018744e+06 | 3.346563e+08 | 3.552466e+07 | 4.466900e+08 | 4.582682e+07 | 3.585457e+08 | 5.206610e+07 | 3.796124e+08 | 5.376342e+07 |
1 | 873169 | 七丰精工 | T000160587 | 七丰精工科技股份有限公司 | 七丰精工 | Qifeng Precision Industry Science And Technic ... | QIFENG | 中高端紧固件的研发、生产和销售。 | 铁道道钉、铁道轨道配件、冲压件、紧固件、电子元件配件、仪器仪表配件、机械配件的研发、制造... | 330424.0 | ... | 1.721484e+08 | 3.475860e+07 | 2.190866e+08 | 3.622736e+07 | 2.018319e+08 | 3.713122e+07 | 1.665355e+08 | 1.963572e+07 | 1.832285e+08 | 1.393948e+07 |
2 | 300157 | 新锦动力 | T000029111 | 新锦动力集团股份有限公司 | 新锦动力 | New Jcm Group Co.,Ltd. | NEW JCM | 石油勘探产业链的软、硬件产品的研发与销售。 | 为石油和天然气开采提供服务;石油天然气勘探技术、石油天然气设备、仪器仪表技术开发、技术培... | 110108.0 | ... | 6.959377e+08 | -1.209104e+09 | 4.205594e+08 | -7.190443e+08 | 4.638033e+08 | -1.080289e+08 | 6.565801e+08 | -1.747739e+08 | 5.521395e+08 | -1.657814e+08 |
3 | 300645 | 正元智慧 | T000242179 | 正元智慧集团股份有限公司 | 正元智慧 | Zhengyuan Zhihui Group Co.,Ltd. | ZHENGYUAN ZHIHUI | 智慧校园、智慧园区和行业智慧化系统建设及增值运营服务。 | 许可项目:第一类增值电信业务;第二类增值电信业务;建筑智能化系统设计;建设工程施工;职业... | 330110.0 | ... | 8.255948e+08 | 2.763797e+07 | 9.475519e+08 | 5.841343e+07 | 1.065043e+09 | 7.121338e+07 | 1.224653e+09 | 4.185133e+07 | 1.194849e+09 | 1.199187e+07 |
4 | 300581 | 晨曦航空 | T000186700 | 西安晨曦航空科技股份有限公司 | 晨曦航空 | Xi’An Chenxi Aviation Technology Corp.,Ltd. | ChenXi Aviation | 研发、生产、销售航空机电产品及提供相关专业技术服务。 | 一般项目:导航、测绘、气象及海洋专用仪器制造;卫星导航服务;通信设备制造;信息系统集成服... | 610113.0 | ... | 2.707577e+08 | 6.295654e+07 | 2.241767e+08 | 2.672265e+07 | 2.330823e+08 | 3.567901e+07 | 2.333504e+08 | 5.754193e+06 | 1.405277e+08 | -2.658507e+07 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
5718 | 000018 | 神城A退 | 01000018 | 神州长城股份有限公司 | 神州长城 | Sino Greatwall Co.,Ltd. | SinoGreatWallSino-B | 建筑装饰工程设计与施工及建筑相关工程施工。 | 生产经营纺织工业品及所需的原材料,辅料,机械设备,各种面料服装,井提供相关的服务(不含现... | 511011.0 | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5719 | 000015 | PT中浩A | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5720 | 000013 | *ST石化A | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5721 | 000005 | ST星源 | 01000005 | 深圳世纪星源股份有限公司 | 世纪星源 | Shenzhen Fountain Corporation | fountain | 绿色低碳城市社区建设相关的服务业务。 | 生产经营各种喷胶布、针刺布、缝编尼纺布、粘合布、纤维裥棉色织、印花布以及服装、服装面料、... | 440303.0 | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5722 | 000003 | PT金田A | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
5723 rows × 61 columns
对这10年的所有股票主营业务收入和净利润求和:
# 10年主营业务收入
income_columns = [col for col in basic_report_df.columns if col.startswith("营业总收入_")]
# 10年净利润
profit_columns = [col for col in basic_report_df.columns if col.startswith("净利润_")]# 计算每年主营收入总额
total_income = basic_report_df[income_columns].sum()
# 计算每年净利润总额
total_profit = basic_report_df[profit_columns].sum()
# 打印每年主营收入和净利润总额
print("每年主营业务收入总额:", total_income)
print("每年净利润总额:", total_profit)
每年主营业务收入总额: 营业总收入_2015 3.244243e+13
营业总收入_2016 3.530041e+13
营业总收入_2017 4.221242e+13
营业总收入_2018 4.896717e+13
营业总收入_2019 5.400279e+13
营业总收入_2020 5.598929e+13
营业总收入_2021 6.720450e+13
营业总收入_2022 7.103035e+13
营业总收入_2023 7.219715e+13
营业总收入_2024 7.197848e+13
dtype: float64
每年净利润总额: 净利润_2015 2.852718e+12
净利润_2016 3.037920e+12
净利润_2017 3.669118e+12
净利润_2018 3.939361e+12
净利润_2019 4.253864e+12
净利润_2020 4.365113e+12
净利润_2021 5.275212e+12
净利润_2022 5.503174e+12
净利润_2023 5.379411e+12
净利润_2024 5.220673e+12
dtype: float64
使用matplotlib绘制图像:
import matplotlib.pyplot as pltyears = [col.split('_')[-1] for col in income_columns]
plt.rcParams['font.sans-serif']=['Microsoft YaHei'] # 用来正常显示中文标签
plt.figure(figsize=(10, 6))
plt.plot(years, total_income.values, marker='o', label='主营业务收入总额')
plt.plot(years, total_profit.values, marker='o', label='净利润总额')
plt.xlabel('年份')
plt.ylabel('金额')
plt.title('近十年主营业务收入与净利润总额')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()
总结
本笔记通过AkShare接口获取了A股上市公司近十年的业绩报表数据,并结合个股基本信息,实现了多年度主营业务收入和净利润的整合分析。我们首先演示了单年度报表的获取与保存,随后批量获取了过去十年所有上市公司的年报数据,并与公司基本信息表融合,形成了包含主营收入和净利润的宽表。通过对各年度主营收入和净利润的总和进行统计和可视化,直观展示了A股整体业绩的变化趋势。该流程为后续深入分析行业、公司成长性及财务健康状况等提供了坚实的数据基础。