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

Python中如何将nse_get_fno_lot_sizes函数输出转为DataFrame

问题说明
  • 使用nsepython库开展数据提取工作,需调用库中nse_get_fno_lot_sizes函数获取指定交易标的的F&O合约手数(lot size)
  • 期望得到标准pandas DataFrame格式的返回结果
  • 测试传入"adaniports"标的、"pandas"模式参数时,打印类型得到<class 'function'>,无法确认返回值是否为合规DataFrame,需要正确实现方案
问题根因

类型检查代码写法存在错误:测试代码中type(nse_get_fno_lot_sizes)没有添加调用括号和参数,本质是在检查函数对象本身的类型,自然返回<class 'function'>,这个结果和函数执行后的返回值类型没有任何关系。
结合函数源码逻辑,传入mode="pandas"参数时,函数本身就会返回标准pandas DataFrame对象,不存在格式不符合要求的问题。

参考依据

函数核心实现逻辑

def nse_get_fno_lot_sizes(symbol="all",mode="list"):
    url="https://archives.nseindia.com/content/fo/fo_mktlots.csv"

    if(mode=="list"):
        s=requests.get(url).text
        res_dict = {}
        for line in s.split('\n'):
          if line != '' and re.search(',', line) and (line.casefold().find('symbol') == -1):
              (code, name) = [x.strip() for x in line.split(',')[1:3]]
              res_dict[code] = int(name)
        if(symbol=="all"):
            return res_dict
        if(symbol!=""):
            return res_dict[symbol.upper()]

    if(mode=="pandas"):
        payload = pd.read_csv(url)
        if(symbol=="all"):
            return payload
        else:
            payload = payload[(payload.iloc[:, 1] == symbol.upper())]
            return payload

从实现逻辑可以明确:当mode="pandas"时,函数通过pd.read_csv拉取官方CSV数据,筛选指定标的后直接返回payload对象,本身就是标准pandas DataFrame结构。

原有错误测试代码

print(nse_get_fno_lot_sizes("adaniports","pandas"))
print(type(nse_get_fno_lot_sizes))

原有代码运行输出

UNDERLYING            SYMBOL    JUL-22  AUG-22  SEP-22  DEC-22  MAR-23  JUN-23  DEC-23  JUN-24  DEC-24  JUN-25  DEC-25  JUN-26  DEC-26  JUN-27
8            ADANI PORT & SEZ LTD   ADANIPORTS  1250    1250    1250
<class 'function'>                                  

输出第一行已经是标准DataFrame的打印格式,第二行的类型结果是代码写法错误导致的误判。

正确实现代码

将函数返回值赋值给变量后,再做类型检查和后续数据处理即可,参考代码如下:

import pandas as pd
from nsepython import nse_get_fno_lot_sizes

# 调用函数,将返回结果赋值给变量
lot_size_result = nse_get_fno_lot_sizes(symbol="adaniports", mode="pandas")

# 正确检查返回值类型
print(type(lot_size_result))
# 预期输出: <class 'pandas.core.frame.DataFrame'>

# 可直接使用所有pandas原生方法处理数据
print(lot_size_result.info())

补充提示:如果需要提取当前在交易合约的手数,可对返回的DataFrame做空值列过滤,即可拿到对应到期月份的有效手数数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:54:25