3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
您好!出现这种现象并不是因为研究环境和策略环境的 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() 转换后,您在策略环境中就能得到和研究环境中完全一致的嵌套字典格式了。