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

