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

