使用Yfinance获取数据做线性回归时,合并Numpy数组遇格式警告
问题解决:合并不同长度Numpy数组触发VisibleDeprecationWarning
问题原因
你遇到的警告是因为要合并的10个Numpy数组长度不一致(每只股票的收盘价数据行数不同),Numpy无法创建规整的多维数组,因此触发了弃用警告。
解决方案
方案1:对齐时间索引,统一数据长度(推荐用于线性回归场景)
线性回归需要规整的时间序列数据,优先通过对齐时间索引来统一所有股票的数据长度:
import yfinance as yf import pandas as pd # 替换为你的10只股票代码 tickers = ["AAPL", "MSFT", "GOOG", "AMZN", "TSLA", "META", "NVDA", "NFLX", "BABA", "JPM"] # 批量获取每只股票的收盘价(带时间索引) price_dfs = [] for ticker in tickers: # 按需调整时间范围 df = yf.download(ticker, start="2020-01-01", end="2024-06-01")["Close"].to_frame(name=ticker) price_dfs.append(df) # 按时间索引合并,只保留所有股票都存在的交易日数据 merged_df = pd.concat(price_dfs, axis=1, join="inner") # 转换为规整的Numpy数组(所有列长度一致) normalized_array = normalize_data(merged_df.values)
方案2:创建Object类型数组(保留不同长度数据)
如果确实需要保留各股票的原始数据长度,按警告提示指定dtype=object即可:
import numpy as np # 假设arr_list是你获取到的10个长度不一的Numpy数组列表 arr_list = [closing_price(ticker) for ticker in tickers[:10]] # 指定dtype=object创建数组 merged_array = np.array(arr_list, dtype=object)
⚠️ 注意:Object类型数组无法直接进行整体数值运算,适合单独遍历每个子数组处理。
调试建议
- 先检查数组长度差异:执行
print([len(arr) for arr in arr_list]),确认是否存在长度不一致的情况。 - 若长度差异由时间范围不同导致,优先使用方案1对齐时间,这是时间序列预测的基础要求。
内容的提问来源于stack exchange,提问作者rae
相关产品推荐
相关产品推荐

