使用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
相关产品推荐
相关产品推荐

