You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过循环逐次合并Pandas DataFrame为日期对齐的主DataFrame

循环清洗多标的数据后按日期对齐合并主DataFrame实现方案

最优方案:列表收集清洗结果后一次性合并

该方案性能最优,避免循环中反复修改DataFrame的额外开销,逻辑和非循环场景下的pd.concat写法完全一致,自动按日期索引对齐、缺失值填充NaN。

import pandas as pd

def clean_func(tkr,f1):
    f1['Date'] = pd.to_datetime(f1['Date']) 
    f1.index = f1['Date']
    keep = ['Col1','Col2']
    f2 = f1[keep]
    f2.columns = [tkr+'Col1',tkr+'Col2']
    return f2

tkrs = ['tkr1','tkr2','tkr3']
# 初始化空列表,存储每个标的清洗完成后的DataFrame
processed_dfs = []

for tkr in tkrs:
    df1 = pd.read_csv(f'C:\\path\\{tkr}.csv')
    df2 = clean_func(tkr, df1)
    processed_dfs.append(df2)

# 沿列方向一次性合并,自动按日期索引对齐
combined = pd.concat(processed_dfs, axis=1)

核心特性

  • 自动以DatetimeIndex为键做全外连接对齐,保留所有标的出现过的全部日期
  • 标的缺失对应日期数据时,对应位置自动填充NaN
  • 列名已在清洗阶段按标的代码重命名,合并后无列名冲突
  • 标的数量较多时(百级以上)性能远高于逐次循环拼接

备选方案:循环内逐次拼接

如果循环过程中需要对已合并的主表做增量处理,可以用join逐次追加新标的数据:

import pandas as pd

def clean_func(tkr,f1):
    f1['Date'] = pd.to_datetime(f1['Date']) 
    f1.index = f1['Date']
    keep = ['Col1','Col2']
    f2 = f1[keep]
    f2.columns = [tkr+'Col1',tkr+'Col2']
    return f2

tkrs = ['tkr1','tkr2','tkr3']
# 初始化空主表
combined = pd.DataFrame()

for tkr in tkrs:
    df1 = pd.read_csv(f'C:\\path\\{tkr}.csv')
    df2 = clean_func(tkr, df1)
    if combined.empty:
        combined = df2
    else:
        # how='outer' 保留所有日期,缺失值自动填充NaN
        combined = combined.join(df2, how='outer')

注意:非必要不选该方案,逐次拼接会反复复制全量主表数据,数据量较大时运行效率会明显降低。

内容的提问来源于stack exchange,提问作者GC123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:36:27