🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 聚宽平台中 label() 函数是什么意思?如何使用?

joinquant | 发布时间: 2026/6/24
以下内容由 EasyQuant 生成。

问题描述

关于label()的意思,新手求指知识点

balance.total_owner_equities/valuation.market_cap/100000000.0).label("BTM")

balance.total_assets.label("Inv")
求指点,代码中的 label() 是什么意思呢?在对象下没有看到这个属性。百度也没有找到python中有这个函数方法,请指点下应该去看哪些资料学习这块知识。多谢

解决方案

什么是 label() 方法?

在 JoinQuant(聚宽)平台中,当你使用 query() 函数来获取财务数据(get_fundamentals)时,代码中的 label() 方法的作用是给查询的字段起一个别名(Alias)

这个方法并不是 Python 语言自带的内置函数,也不是 Pandas 的方法,而是来自于一个非常著名的 Python 数据库工具库——SQLAlchemy

为什么需要使用 label()?

在你的代码示例中:
(balance.total_owner_equities / valuation.market_cap / 100000000.0).label("BTM")

你进行了一个数学运算(计算账面市值比 BTM)。如果不使用 label(),当你把这个查询结果转换成 Pandas DataFrame 时,这一列的列名将会是一长串非常难看的字符串,类似于 "balance.total_owner_equities / valuation.market_cap / 100000000.0"

加上 .label("BTM") 后,返回的 DataFrame 中,这一列的列名就会干净利落地变成 "BTM"。这极大地方便了后续的数据处理和调用(例如你可以直接用 df['BTM'] 来获取这一列的数据)。

同理,balance.total_assets.label("Inv") 就是把总资产这一列在返回的结果中重命名为 "Inv"

学习资料推荐

既然知道了它的出处,你可以通过以下途径深入学习:

  1. SQLAlchemy 官方文档:JoinQuant 的 query() 对象实际上就是一个 sqlalchemy.orm.query.Query 对象。你可以搜索 SQLAlchemy label alias 来了解更多关于列重命名的知识。
  2. SQL 基础知识label() 的作用等同于 SQL 语句中的 AS 关键字(例如 SELECT total_assets AS Inv FROM balance)。了解基础的 SQL 查询语法有助于你更好地理解 JoinQuant 的 query() 逻辑。
  3. JoinQuant 官方 API 文档:在聚宽 API 文档的 get_fundamentals 章节,虽然没有详细展开 SQLAlchemy 的所有方法,但提到了 query_object 是一个 SQLAlchemy 对象,支持 filter(), order_by(), limit() 等链式调用。

代码对比示例

不使用 label():

q = query(balance.total_assets / 10000)
df = get_fundamentals(q, date='2023-01-01')
# df 的列名可能是 'balance.total_assets / 10000'

使用 label():

q = query((balance.total_assets / 10000).label('assets_in_wan'))
df = get_fundamentals(q, date='2023-01-01')
# df 的列名变成了 'assets_in_wan',调用时直接 df['assets_in_wan'] 即可

希望这个解答能帮你理清思路,祝量化学习顺利!