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

使用pandas_datareader调用MoexReader报错:DataFrame无append属性

解决pandas_datareader调用MOEX接口时的AttributeError问题

问题原因

这个错误是因为pandas 2.0及以上版本移除了DataFrame的append方法,而你当前使用的pandas_datareader版本还没适配这个变更,导致内部调用append时触发报错。

解决方案

方案一:降级pandas到兼容版本

直接把pandas降到2.0以下的稳定版本,比如1.5.3,这样pandas_datareader的原有逻辑就能正常运行:

pip install pandas==1.5.3 --force-reinstall

安装完成后重新运行你的代码即可。

方案二:直接调用MOEX官方API(无需依赖pandas_datareader)

如果不想降级pandas,可以直接通过MOEX的公开API获取数据,示例代码如下:

import pandas as pd
import requests

def fetch_moex_stock_data(ticker, start_date, end_date):
    # MOEX历史数据接口
    api_url = f"https://iss.moex.com/iss/history/engines/stock/markets/shares/boards/TQBR/securities/{ticker}.json"
    # 请求参数
    params = {
        'from': start_date,
        'till': end_date,
        'iss.meta': 'off',  # 关闭元数据返回,减少数据量
        'iss.json': 'extended'
    }
    # 发送请求
    resp = requests.get(api_url, params=params)
    data = resp.json()
    # 转换为DataFrame
    df = pd.DataFrame(data['history']['data'], columns=data['history']['columns'])
    # 可选:将交易日期转为datetime格式
    df['TRADEDATE'] = pd.to_datetime(df['TRADEDATE'])
    return df

# 调用示例
sber_data = fetch_moex_stock_data('SBER', '2020-07-02', '2020-07-03')
print(sber_data)

方案三:临时修改pandas_datareader源码(进阶)

找到pandas_datareader包中的moex.py文件(路径通常是site-packages/pandas_datareader/moex.py),定位到read方法里的df.append()语句,将其替换为pd.concat():
原代码类似:

df = df.append(tmp_df)

修改为:

import pandas as pd
df = pd.concat([df, tmp_df], ignore_index=True)

修改保存后,重新运行你的代码即可修复问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:45:07