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

如何将requests下载的NSE CSV文件转换为Pandas DataFrame?

解决NSE印度证券交易所CSV数据转Pandas DataFrame的问题

核心实现步骤

  1. 确认请求返回有效CSV内容
  2. 将CSV字符串/字节流转为Pandas可读取的格式

完整代码示例

import pandas as pd
from io import StringIO
import requests

# 替换为你从开发者工具复制的完整请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'text/csv,application/json,text/plain,*/*',
    'Referer': 'https://www.nseindia.com/get-quotes/equity?symbol=ASIANPAINT',
    # 补充其他必要请求头(如Cookie、X-Requested-With等,从开发者工具复制)
}

# ASIANPAINT历史数据CSV接口URL(可自行调整日期范围)
url = "https://www.nseindia.com/api/csv/historical/cm/equity?symbol=ASIANPAINT&series=[%22EQ%22]&from=01-01-2023&to=31-12-2023"

# 发起请求
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'  # 强制指定编码,避免乱码

# 转换为DataFrame
if response.status_code == 200:
    # 用StringIO将CSV文本转为可读取的文件对象
    csv_buffer = StringIO(response.text)
    # 若CSV开头有冗余说明行,添加skiprows参数跳过(例如skiprows=2)
    df = pd.read_csv(csv_buffer)
    print(df.head())
else:
    print(f"请求失败,状态码:{response.status_code}")
    print("检查请求头是否完整,尤其是User-Agent、Referer和Cookie参数")

常见问题处理

  • 乱码问题:强制设置response.encoding='utf-8'或utf-8-sig,确保编码匹配NSE返回的CSV格式
  • CSV格式异常:打印response.text前10行,确认是否为有效CSV。若有冗余说明行,调整skiprows=N参数跳过对应行数
  • 请求被拦截:确保请求头完全复制开发者工具中的内容,尤其是Cookie和X-Requested-With这类反爬参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:15:08