如何快速合并20个含股票价格的Pandas时间序列DataFrame?
高效合并20个Pandas DataFrame的方法
问题分析
你尝试的循环方法无效,核心原因是未初始化df_merge变量——第一次循环时df_merge还不存在,自然会报错。即便修复初始化问题,逐次合并的方式对于20个DataFrame来说效率较低,因为每次合并都会产生新的DataFrame,时间复杂度接近O(n²)。
最快实现方式:使用pd.concat
针对每个DataFrame仅包含Date和单支股票价格的场景,pd.concat是最高效的合并方式,它能一次性完成所有DataFrame的对齐合并,时间复杂度为O(n)。
步骤:
- 先将每个DataFrame的
Date列设为索引,这样所有DataFrame会以日期为键自动对齐。 - 沿列方向(
axis=1)拼接所有处理后的DataFrame,使用outer连接保留所有日期。 - 最后将索引重新转换为
Date列。
代码示例:
import pandas as pd # 假设df_list是你的20个DataFrame组成的列表 # 第一步:为每个DataFrame设置Date为索引 processed_dfs = [df.set_index('Date') for df in df_list] # 第二步:拼接所有DataFrame,outer连接保留全部日期 merged_df = pd.concat(processed_dfs, axis=1, join='outer') # 第三步:将索引转回Date列 merged_df = merged_df.reset_index().rename(columns={'index': 'Date'})
修复原循环方法(备用)
如果你想保留逐次合并的逻辑,只需初始化df_merge为列表中的第一个DataFrame,再遍历剩余DataFrame进行合并:
df_list = [PACE, NYKAA, ASRL, ZOMATO] # 你的DataFrame列表 # 初始化合并结果为第一个DataFrame df_merge = df_list[0] # 遍历剩余DataFrame进行合并 for df in df_list[1:]: df_merge = df_merge.merge(df, on='Date', how='outer')
但注意:这种方法的效率远低于pd.concat,尤其当DataFrame数量较多或数据量较大时。
内容的提问来源于stack exchange,提问作者Shaurya Dubey
相关产品推荐
相关产品推荐

