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

按日期拆分Alpha Vantage返回JSON为多份CSV并补全缺失值解决报错

报错原因与优化实现

报错根源

你的代码触发TypeError: 'list' object is not callable是因为变量命名冲突:

  • 你自定义了名为open的列表变量,覆盖了Python内置的open()文件操作函数,后续执行文件写入调用open()时,Python会尝试把你定义的列表当做函数调用,直接触发报错。
  • 另外自定义函数num_el中用list作为参数名,覆盖了Python内置的list类,也属于潜在风险。

优化后实现方案

你要实现的按日期拆分、补全缺失1分钟间隔的需求,用Pandas内置的时间序列能力可以大幅简化逻辑,代码如下:

import requests
import pandas as pd
import numpy as np

# 配置参数
symbol = "MSFT"
api_key = 'APIKEYHERE'
symbol_list = symbol.split(",")

for ticker in symbol_list:
    # 拉取接口数据
    url = f'https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol={ticker}&outputsize=full&interval=1min&apikey={api_key}'
    resp = requests.get(url)
    raw_data = resp.json()
    
    # 转换为DataFrame并格式化时间字段
    df = pd.DataFrame(raw_data['Time Series (1min)']).T
    df.index = pd.to_datetime(df.index)
    df.index.name = 'time'
    df = df.reset_index()
    
    # 字段重命名统一格式
    df = df.rename(columns={
        '1. open': 'Open',
        '2. high': 'High',
        '3. low': 'Low',
        '4. close': 'Close',
        '5. volume': 'Volume'
    })
    
    # 按日期分组处理
    for date, group in df.groupby(df['time'].dt.date):
        # 设置时间为索引,按1分钟频率重采样,自动补全缺失的时间间隙
        daily_df = group.set_index('time').resample('1min').asfreq()
        # 新增是否空缺标记字段
        daily_df['Empty Value'] = daily_df['Open'].isna()
        # 提取时间部分作为索引
        daily_df.index = daily_df.index.time
        daily_df.index.name = 'Time'
        # 输出到csv
        daily_df.to_csv(f"{ticker}_1min_{date}.csv")

主要优化点

  • 修复了变量命名冲突问题,所有变量不再使用Python内置关键字/函数名
  • 用resample('1min').asfreq()直接实现缺失1分钟间隔的补全,无需手动生成时间范围再合并
  • 直接按日期字段分组,省去了手动计算分组长度、偏移量的冗余逻辑
  • 去掉了循环拆分列、拼接列的冗余操作,直接重命名列后即可输出
  • 简化了股票列表遍历逻辑,无需手动维护循环计数器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:27:03