🚀 AI 一键生成 joinquant 策略代码

为什么 JoinQuant 的 get_industry 函数在研究和策略环境中返回格式不同?

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

问题描述

为何get_industry函数在研究和策略里面不同呢?

我调用get_industry函数,在研究环境里面,返回的是下面的格式,和帮助文件里面是一致的。
{'000001.XSHE': {'jq_l1': {'industry_code': 'HY007', 'industry_name': '金融指数'},
'jq_l2': {'industry_code': 'HY493', 'industry_name': '多元化银行指数'},
'sw_l1': {'industry_code': '801780', 'industry_name': '银行I'},
'sw_l2': {'industry_code': '801192', 'industry_name': '银行II'},
'sw_l3': {'industry_code': '851911', 'industry_name': '银行III'},
'zjw': {'industry_code': 'J66', 'industry_name': '货币金融服务'}
},
'000002.XSHE': {'jq_l1': {'industry_code': 'HY011', 'industry_name': '房地产指数'},
'jq_l2': {'industry_code': 'HY509', 'industry_name': '房地产开发指数'},
'sw_l1': {'industry_code': '801180', 'industry_name': '房地产I'},
'sw_l2': {'industry_code': '801181', 'industry_name': '房地产开发II'},
'sw_l3': {'industry_code': '851811', 'industry_name': '房地产开发III'},
'zjw': {'industry_code': 'K70', 'industry_name': '房地产业'}
}
}

在策略环境里面,返回的是
{"Index(['601088.XSHG', '601566.XSHG', '600816.XSHG', '000631.XSHE',\n '600507.XSHG', '002083.XSHE', '002713.XSHE', '000601.XSHE',\n '600276.XSHG', '300093.XSHE'],\n dtype='object', name='code', length=243)": {}}

这两个数据格式差异太大了。请问这是为什么呢?

解决方案

您好!出现这种现象并不是因为研究环境和策略环境的 get_industry 函数有差异,而是因为您在两个环境中传入的 security 参数的数据类型不同导致的。

问题原因分析

观察您在策略环境中得到的返回值:

{"Index(['601088.XSHG', '601566.XSHG', ...], dtype='object', name='code', length=243)": {}}

可以明显看到,字典的键(Key)是一个字符串形式的 pandas.Index 对象。这说明您在策略代码中,传给 get_industry 的参数不是一个标准的 Python 列表(list),而是一个 Pandas 的索引对象(例如从 DataFrame 或 Series 中直接获取的 df.index)。

get_industry 函数的底层逻辑在接收到这个 pandas.Index 对象时,没有将其识别为可迭代的股票代码列表,而是将其整体转换为了一个字符串,并试图查询这个“超长字符串”对应的行业信息。由于显然不存在这样的股票代码,所以返回了空字典 {}

解决方法

get_industry(security, date=None) 函数的 security 参数要求传入的是单个股票代码字符串包含股票代码字符串的标准列表(list)

您只需要在调用函数前,将 pandas.Index 转换为 list 即可解决此问题。

错误写法(您目前的策略写法):

# 假设 stocks_index 是一个 DataFrame 的 index
stocks_index = df.index 
# 直接传入 Index 对象,会导致格式异常
industry_info = get_industry(stocks_index) 

正确写法:

# 假设 stocks_index 是一个 DataFrame 的 index
stocks_index = df.index 
# 使用 list() 将其转换为标准的 Python 列表
stocks_list = list(stocks_index) 
# 或者使用 stocks_index.tolist()

# 传入标准列表
industry_info = get_industry(stocks_list) 

经过 list() 转换后,您在策略环境中就能得到和研究环境中完全一致的嵌套字典格式了。