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

如何在循环中为DataFrame添加不同指标数据的列?

问题分析与解决方案

你的代码在添加指标列时出现问题,核心原因是未基于时间列对齐数据,直接按列拼接会导致索引不匹配,最终数据错位或丢失。以下是修正后的方案:

核心问题点

  • 直接使用pd.concat且join="inner",若初始df与idata的索引不一致(比如API返回的CSV行数和原df不同),会过滤掉不匹配的行
  • 每次保存再读取CSV属于冗余操作,既耗时又容易引入路径问题
  • 未保留时间列用于对齐,无法保证指标数据与原df的价格数据一一对应

修正后的代码

import pandas as pd
import requests

inditest = ['SMA', 'EMA', 'WMA']
# 实际场景中初始df已包含时间列(如'time')和价格列
# df = pd.read_csv("你的价格数据文件.csv")  

for i in inditest: 
    indicator_url = f"https://www.alphavantage.co/query?function={i}&symbol=AAPL&interval=15min&time_period=60&series_type=close&datatype=csv&apikey={API_KEY}"
    
    # 直接从API响应读取CSV,无需保存到本地
    idf = pd.read_csv(indicator_url)
    
    # 重命名指标列避免冲突,保留时间列用于对齐
    idf = idf.rename(columns={idf.columns[1]: f"{i}_close"})
    # 基于时间列合并,确保数据严格对应
    df = pd.merge(df, idf[['time', f"{i}_close"]], on='time', how='inner')

关键优化点

  • 跳过本地文件保存步骤,直接用pd.read_csv读取API响应,提升效率
  • 使用pd.merge基于时间列time合并,保证每一行的价格与指标数据完全对应
  • 对指标列重命名,避免不同指标的列名冲突
  • 用how='inner'只保留双方都有数据的时间点,避免空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:38:25