You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

时间序列数据ValueError:JPYBasket等品种重复轴报错排查

解决fxcmpy获取篮子数据时的"cannot reindex from a duplicate axis"错误

从你贴的JPYBasket数据示例就能一眼定位问题:篮子类品种(比如JPYBasket、EMBasket)返回的数据里存在重复的日期索引(比如2019-04-26出现了两行记录),而EUR/USD这类单一货币对的K线数据不会有这种情况,所以执行pd.to_datetime重索引操作时就触发了ValueError。

这种情况是fxcmpy返回篮子数据的常见问题——某些日期会有多条记录(比如包含结算调整数据或无效的零交易量条目),直接处理就会打破pandas对索引唯一性的要求。下面是两种实用的解决方法:

方法1:保留每个日期的最后一条记录

直接去除重复索引,保留每个日期最后出现的那一行数据,这是最通用的处理方式:

import fxcmpy
import pandas as pd
import datetime
from datetime import date
import numpy as np

TOKEN = "hidden"
con = fxcmpy.fxcmpy(access_token=TOKEN, log_level='error')
print(con.get_instruments())
symbols = con.get_instruments()
ticker = 'JPYBasket'
start = datetime.datetime(2008,1,1)
end = datetime.datetime.today()
today = date.today()
start1 = datetime.datetime(2019,1,1)

# 获取原始数据
data = con.get_candles(ticker, period='D1', start = start, end = end)
data1 = con.get_candles(ticker, period='D1', start = start1, end = end)

# 关键步骤:去除重复索引,保留每个日期的最后一条记录
data = data[~data.index.duplicated(keep='last')]
data1 = data1[~data1.index.duplicated(keep='last')]

# 现在执行索引转换就不会报错了
data.index = pd.to_datetime(data.index, format ='%Y-%m-%d')
data1.index = pd.to_datetime(data1.index, format ='%Y-%m-%d')

方法2:过滤掉零交易量的无效行

观察你的数据示例,重复日期里有一行tickqty为0(通常是无效的空数据),你也可以直接过滤这类条目,同时解决重复索引问题:

# 替换上面的去重步骤为:
data = data[data['tickqty'] != 0]
data1 = data1[data1['tickqty'] != 0]

两种方法都能解决你的问题,你可以按需选择:如果只需要保证索引唯一,方法1足够;如果要确保数据都是有实际交易的有效K线,方法2更合适。

内容的提问来源于stack exchange,提问作者Slartibartfast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:13:02