循环读取SQL数据生成pandas DataFrame按日期索引匹配合并列问题
问题原因
你当前使用的append方法是行级堆叠操作,每次新增的指数数据会作为新行追加到原有DataFrame末尾,自然不会按日期索引对齐,才会出现日期重复、数据错位的问题。
解决方案
把代码中原来的追加逻辑替换为按索引列对齐的合并逻辑,利用pandas的join方法天然支持按索引匹配的特性,就能实现多列按日期自动对齐,修改步骤如下:
- 替换原代码中的
indexReturnData = indexReturnData.append(indexReturns)行,改为以下逻辑:
# 首次迭代直接赋值,后续迭代按日期索引外连接对齐 if indexReturnData.empty: indexReturnData = indexReturns else: # how='outer'会保留所有日期,缺失数据自动填充NaN indexReturnData = indexReturnData.join(indexReturns, how='outer')
- 所有数据迭代完成后,可额外添加排序逻辑保证日期按时间顺序排列:
indexReturnData = indexReturnData.sort_index()
效果说明
修改后输出结果会自动按日期对齐,同一个日期的所有指数收益率会展示在同一行,不存在重复日期行:
Date S&P500 S&P600 9/1/1995 0.042 0.025 10/1/1995 -0.004 -0.050 11/1/1995 0.044 0.038 12/1/1995 0.019 0.016 ... 4/1/2020 0.128 0.126 5/1/2020 0.048 0.041 6/1/2020 0.020 0.036 7/1/2020 0.056 0.040
内容的提问来源于stack exchange,提问作者Herman L
相关产品推荐
相关产品推荐

