Python中两个股票价格DataFrame相除部分位置返回NaN原因求解
除法结果出现NaN的常见原因
- 交易日索引未对齐
不同标的的交易日存在差异:比如某只股票当日停牌、上市时间晚于你设置的start_date、所属市场节假日不同等,都会导致两个DataFrame的日期索引不完全重合。Pandas做元素级运算时默认按索引对齐,仅两边都存在的索引位置会返回计算结果,仅单边存在的索引位置默认填充NaN。 - 单标的本身存在空值字段
即使日期完全对齐,yfinance数据源本身可能存在部分字段(开盘价/收盘价/成交量等)缺失的情况,若运算的两个位置任意一边是空值,除法结果也会返回NaN。 - 维度不匹配导致的对齐异常
你对data2调用了squeeze()方法,若data2因为数据缺失、拉取异常等原因降维为Series后,和多列结构的data1做运算时,若列名、索引匹配规则不符合预期,也会产生大量空值。
排查与修复方案
你可以先执行以下代码确认空值来源:
# 查看两个DataFrame的索引长度差 print(len(data1.index), len(data2.index)) # 查看两个DataFrame各自的空值数量 print(data1.isnull().sum()) print(data2.isnull().sum())
确认是索引不对齐导致的问题后,可以先取交集对齐索引再运算:
# 取两个DataFrame共同的交易日 common_idx = data1.index.intersection(data2.index) data = data1.loc[common_idx] / data2.loc[common_idx]
内容的提问来源于stack exchange,提问作者shade1234
相关产品推荐
相关产品推荐

