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

JoinQuant 平台 get_price 函数自动去重问题解析与保留重复项的方法

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

问题描述

Get_price函数输入股票list是否自动给去重了?

请参考下面的两行代码

# 同样的股票代码
security_list1=['600567.XSHG','600567.XSHG']
df1=get_price(security_list1, start_date='2022-04-11', end_date='2022-04-11',
frequency='daily', fields=['close'], skip_paused=False, fq='pre', panel=False)
print(df1)

# 不同的股票代码
security_list2=['600567.XSHG','600568.XSHG']
df2=get_price(security_list2, start_date='2022-04-11', end_date='2022-04-11',
frequency='daily', fields=['close'], skip_paused=False, fq='pre', panel=False)
print(df2)
输出结果是:

time code close
0 2022-04-11 600567.XSHG 3.02
time code close
0 2022-04-11 600567.XSHG 3.02
1 2022-04-11 600568.XSHG 1.76
也就意味着,当输入股票有重复的时候,系统自动给删掉了。
问如何保留?????

解决方案

是的,get_price 函数在底层处理时,为了优化数据库查询性能和减少冗余数据传输,会自动对传入的 security_list 进行去重(类似于转换成了 set 集合)。因此,无论你在列表中传入多少个相同的股票代码,API 接口只会返回该股票的一份数据。

如果你在业务逻辑中必须保留输入列表中的重复项(例如为了与某个包含重复股票代码的订单列表或权重列表对齐),你需要在获取到去重后的数据后,使用 pandas 库在本地进行数据合并(Merge)或映射(Map)来还原重复项。

解决方案:使用 Pandas 的 merge 方法还原重复项

你可以先将原始的带有重复项的 security_list 转换成一个 DataFrame,然后与 get_price 返回的结果进行左连接(Left Join)。

以下是具体的代码示例:

import pandas as pd
from jqdata import *

# 原始带有重复代码的股票列表
security_list1 = ['600567.XSHG', '600567.XSHG']

# 1. 调用 get_price 获取数据(此时系统会自动去重,只返回一条 600567.XSHG 的数据)
df1 = get_price(security_list1, 
                start_date='2022-04-11', 
                end_date='2022-04-11', 
                frequency='daily', 
                fields=['close'], 
                skip_paused=False, 
                fq='pre', 
                panel=False)

# 2. 将原始列表转换为 DataFrame
target_df = pd.DataFrame({'code': security_list1})

# 3. 使用 merge 将获取到的行情数据映射回原始列表
# how='left' 保证 target_df 中的每一行(包括重复行)都会被保留
result_df = pd.merge(target_df, df1, on='code', how='left')

print("保留重复项后的结果:")
print(result_df)

输出结果:

保留重复项后的结果:
          code        time  close
0  600567.XSHG  2022-04-11   3.02
1  600567.XSHG  2022-04-11   3.02

总结

  • API 行为get_price 确实会自动去重,这是 API 设计的正常行为。
  • 处理建议:不要试图让 API 直接返回重复数据,而是先获取唯一值数据,再通过 Pandas 在本地进行数据对齐和扩充。这种做法不仅能满足你的需求,还能最大限度地节省网络请求时间和内存消耗。