如何处理存储二维数组的pandas列表 提取指定标的数据存为DataFrame
操作指南
数据结构说明
持有的两个列表为严格按索引一一对应的映射关系:
tickers_univ1p1:长度为45,元素为美股交易标的代码ohlcv_data1p1:长度为45,每个元素为对应标的的行情DataFrame,单表维度为1259行×7列,列字段包含Date、Open、High、Low、Close、Volume、Vwap
数据初始化示例代码如下:
#Load Tickers from our predefined universes, 1.1, 2.1,3.1 #Get a list of OHLCV dataframes to pass into logrets above tickers_univ1p1=get_universe_tickers('1.1', exchange='us_equity')[0] ohlcv_data1p1=get_ohlcv_from_db_raw(tickers_univ1p1,datetime.now()-relativedelta(years=5), datetime.now())
前置校验
操作前先做长度校验,避免索引错位导致数据匹配错误:
assert len(tickers_univ1p1) == len(ohlcv_data1p1), "标的列表与行情列表长度不一致,存在数据缺失"
核心需求实现
打印指定标的对应的二维数组
通过标的代码定位对应索引,直接取出元素打印即可,以查询标的AAPL为例:
# 替换为需要查询的标的代码 target_ticker = "AAPL" # 定位标的对应索引 target_index = tickers_univ1p1.index(target_ticker) # 取出对应行情数据 target_ohlcv = ohlcv_data1p1[target_index] # 打印完整二维数组 print(target_ohlcv)
存储为独立DataFrame
上述代码取出的target_ohlcv本身就是独立的pandas DataFrame对象,可直接用于后续计算或持久化存储:
# 例:存储为本地csv文件 target_ohlcv.to_csv(f"{target_ticker}_5year_ohlcv.csv", index=False)
其他常用操作
- 给所有单标的DataFrame添加标的代码字段,方便后续合并分析
for idx, ticker in enumerate(tickers_univ1p1): ohlcv_data1p1[idx]["ticker"] = ticker
- 合并45个标的的行情为一个总DataFrame
import pandas as pd total_ohlcv = pd.concat(ohlcv_data1p1, ignore_index=True)
- 按指标筛选符合条件的标的数据,比如筛选5年平均收盘价大于100美元的标的:
filter_tickers = [] filter_ohlcv = [] for ticker, df in zip(tickers_univ1p1, ohlcv_data1p1): if df["Close"].mean() > 100: filter_tickers.append(ticker) filter_ohlcv.append(df)
- 批量计算每个标的的日对数收益率
import numpy as np for df in ohlcv_data1p1: df["log_ret"] = np.log(df["Close"]/df["Close"].shift(1))
内容的提问来源于stack exchange,提问作者noisyoscillator
相关产品推荐
相关产品推荐

