3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
是的,get_price 函数在底层处理时,为了优化数据库查询性能和减少冗余数据传输,会自动对传入的 security_list 进行去重(类似于转换成了 set 集合)。因此,无论你在列表中传入多少个相同的股票代码,API 接口只会返回该股票的一份数据。
如果你在业务逻辑中必须保留输入列表中的重复项(例如为了与某个包含重复股票代码的订单列表或权重列表对齐),你需要在获取到去重后的数据后,使用 pandas 库在本地进行数据合并(Merge)或映射(Map)来还原重复项。
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
get_price 确实会自动去重,这是 API 设计的正常行为。