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

JoinQuant 聚宽财务数据查询:如何在 DataFrame 中增加股票名称列?

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

问题描述

运行后无股票名称,如何在code后增加股票名称一列?

行后无股票名称,如何在code后增加股票名称一列?

from jqdata import *
import numpy as np
import pandas as pd

df = get_fundamentals(query(
valuation.code, valuation.market_cap, valuation.pe_ratio, income.total_operating_revenue
).filter(
valuation.market_cap > 1000,
valuation.pe_ratio < 10,
income.total_operating_revenue > 2e10
), date='2015-10-15')
df

解决方案

在 JoinQuant 聚宽平台中,get_fundamentals 查询财务数据返回的 DataFrame 默认只包含股票代码(code)。要增加股票名称列,最有效的方法是使用 get_all_securities() 获取全市场股票的基本信息,然后利用 Pandas 的 map 函数将股票代码映射为股票名称。

以下是修改后的完整代码,它会在 code 列之后插入一列 name(股票名称):

from jqdata import *
import numpy as np
import pandas as pd

# 1. 查询财务数据
df = get_fundamentals(query(
    valuation.code, 
    valuation.market_cap, 
    valuation.pe_ratio, 
    income.total_operating_revenue
).filter(
    valuation.market_cap > 1000,
    valuation.pe_ratio < 10,
    income.total_operating_revenue > 2e10
), date='2015-10-15')

# 2. 获取所有股票的基本信息
# get_all_securities() 返回的 DataFrame 的 index 是股票代码,包含 'display_name' 列
all_securities = get_all_securities()

# 3. 使用 map 函数根据 code 映射出股票名称,并新增一列 'name'
df['name'] = df['code'].map(all_securities['display_name'])

# 4. 调整列的顺序,将 'name' 列移动到 'code' 列之后
cols = df.columns.tolist()
# 找到 name 列并将其弹出,然后插入到索引为 1 的位置(即 code 之后)
cols.insert(1, cols.pop(cols.index('name')))
df = df[cols]

# 打印结果
print(df)

代码原理解析:

  1. get_all_securities():这个 API 会返回一个包含所有标的信息的 DataFrame,其行索引(index)就是股票代码(如 000001.XSHE),其中有一列名为 display_name,存储了股票的中文简称。
  2. df['code'].map(...):这是 Pandas 中非常高效的数据映射方法。它会遍历 df['code'] 中的每一个代码,去 all_securities['display_name'] 中查找对应的名称并返回。
  3. 调整列顺序:默认情况下,新增加的 name 列会被放在 DataFrame 的最后一列。通过获取列名列表 cols,使用 pop 移除 name,再用 insert(1, ...) 将其插入到第二列(索引为1,紧跟在索引为0的 code 后面),最后重新赋值给 df 即可实现列的重排。