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

使用Pandas拼接Forex数据时datetime.date类型拼接报错咨询

解决pandas拼接时datetime.date类型的报错问题

问题原因

你遇到的TypeError是因为Date变量是单个datetime.date对象,而pd.concat()只接受Series或DataFrame类型的对象进行拼接,无法直接处理单个日期对象。

解决方法

需要将单个日期对象转换为与其他列行数一致的pandas Series,确保每一行数据都能对应到当前日期。同时注意原代码中的缩进错误(if not df.empty:后的代码缩进不正确),一并修正。

修正后的完整代码

import pandas as pd
from datetime import date, timedelta
from datetime import datetime

today = date.today()

currencies = ["USD","EUR","RUB"]

for ex in currencies:
    # 移除URL中的空格,避免请求接口报错
    df = pd.read_csv(f'https://eodhistoricaldata.com/api/real-time/{ex}.FOREX?api_token=99999.99999')
    
    if not df.empty:
        combined = df['code'].astype(str)
        df3 = combined.str.split('.').str[0]
        df4 = combined.str.split('.').str[1]
        
        # 将单个日期转为Series,索引与df保持一致,保证行数匹配
        Date = pd.Series(today, index=df.index)
        Open = df['open']
        High = df['high']
        Low = df['low']
        Close = df['close']
        Volume = df['volume']

        total_df = pd.concat([df3, df4, Date, Open, High, Low, Close, Volume],
                         axis=1, keys=['Ticker', 'Exchange', 'Date', 'Open', 'High', 
                         'Low', 'Close', 'Volume'])
        print(total_df)

关键修改说明

  • 将Date = today替换为Date = pd.Series(today, index=df.index):生成和原DataFrame行数相同的Series,每个元素都是当前日期,保证拼接时结构一致。
  • 修正if not df.empty:块内的缩进错误,确保代码逻辑正常执行。
  • 移除URL中的空格(? api_token改为?api_token),避免请求接口时出现无效URL问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:31:17