如何用Python循环遍历股票代码列表批量合并TVDATAFEED数据
问题:批量获取NSE股票数据并合并为单个DataFrame
背景信息
- 使用TVDATAFEED库获取NSE交易所的股票历史数据
- 股票代码列表示例:
symbols = ["NIFTY", "ITC", "BBC", ....etc]
当前实现代码
from tvDatafeed import TvDatafeed, Interval tv = TvDatafeed() tv = TvDatafeed(username, password, chromedriver_path=None) tv = TvDatafeed(auto_login=true) nifty_data = tv.get_hist(symbol='NIFTY',exchange='NSE',interval=Interval.in_1_hour,n_bars=1) print(nifty_index_data) #result will be like this in pandas>>>>>>>
当前存在的问题:需要手动为每只股票编写重复的获取代码,无法高效处理1060只股票,且数据分散在多个独立DataFrame中。
单只股票返回数据格式
| datetime | symbol | open | high | low | close | volume |
|---|---|---|---|---|---|---|
| 2023-07-20 08:45:00 | NSE:NIFTY | 19943.15 | 19991.85 | 19935.45 | 19987.05 | 60215122.0 |
期望结果
将所有股票数据合并到同一个DataFrame,格式如下:
| datetime | symbol | open | high | low | close | volume |
|---|---|---|---|---|---|---|
| 2023-07-20 03:45:00 | NSE:BORORENEW | 474.50 | 485.00 | 473.45 | 483.75 | 89517.0 |
| 2023-07-20 03:45:00 | NSE:NIFTY | 19841.15 | 19844.00 | 19784.55 | 19813.35 | 19934954.0 |
解决方案代码
from tvDatafeed import TvDatafeed, Interval import pandas as pd # 初始化TVDATAFEED客户端(修正重复赋值问题) tv = TvDatafeed(auto_login=True) # 若需账号密码登录,替换为:TvDatafeed(username='你的账号', password='你的密码') # 股票代码列表,维护此列表即可批量处理 symbols = ["NIFTY", "ITC", "BBC", "RELIANCE"] # 存储所有有效股票数据的容器 all_stock_data = [] # 批量遍历获取数据 for symbol in symbols: try: # 获取单只股票的1小时K线数据(最近1条) stock_df = tv.get_hist( symbol=symbol, exchange='NSE', interval=Interval.in_1_hour, n_bars=1 ) # 仅添加非空数据 if not stock_df.empty: all_stock_data.append(stock_df) print(f"已获取 {symbol} 数据") else: print(f"{symbol} 无返回数据") except Exception as e: print(f"获取 {symbol} 数据失败:{str(e)}") # 合并所有数据为单个DataFrame if all_stock_data: merged_df = pd.concat(all_stock_data, ignore_index=True) print("\n合并后完整数据:") print(merged_df) else: print("未获取到任何有效股票数据")
方案优势
- 仅需维护
symbols列表即可批量处理任意数量的股票,无需重复编写获取逻辑 - 加入异常捕获,避免单只股票获取失败导致整个脚本中断
- 自动过滤空数据,保证合并结果的有效性
- 最终输出完全符合期望的合并格式
内容的提问来源于stack exchange,提问作者Aastha Jha
相关产品推荐
相关产品推荐

