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

如何将比特币、以太坊与谷歌数据合并为DataFrame并解决运行报错?

报错原因

该ValueError的核心触发逻辑是:比特币、以太坊属于加密资产,全年无休交易,返回的日期索引覆盖所有自然日;谷歌(GOOG)是美股标的,仅在交易日(排除周末、法定节假日)产生行情数据,二者日期序列无法对齐;且部分情况下雅虎接口会为加密货币返回重复的日期记录,导致pandas做多标的数据拼接reshape操作时检测到重复索引,无法生成多级列的宽表。

修正方案

采用逐个拉取单个标的数据、按日期对齐合并的逻辑,同时主动清理重复索引即可解决:

import datetime
import pandas as pd
import pandas_datareader.data as web

# 设置起止日期
start = datetime.datetime(2018, 2, 15)
end = datetime.datetime(2020, 2, 14)
# 标的列表
tickers = ["BTC-USD","ETH-USD","GOOG"]
df_list = []

for ticker in tickers:
    # 逐个拉取单标的数据
    tmp_df = web.DataReader(ticker, "yahoo", start=start, end=end)
    # 清理可能的重复日期索引,保留最后一条有效记录
    tmp_df = tmp_df[~tmp_df.index.duplicated(keep='last')]
    # 给列名加上标的代码,方便后续区分不同标的的行情字段
    tmp_df.columns = pd.MultiIndex.from_product([[ticker], tmp_df.columns])
    df_list.append(tmp_df)

# 按日期索引对齐合并,默认取所有标的共有的交易日日期
combined_df = pd.concat(df_list, axis=1, join='inner')

如果需要保留加密货币所有自然日的记录,仅对缺失的GOOG行情自动填充空值,将最后一行concat的参数join='inner'改为join='outer'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:45:03