如何在Python中实现类似R中do.call(rbind, list)的列表转堆叠DataFrame?
Python实现R中
do.call(rbind, list)的高效方法 你需要将DataFrame列表堆叠为单个DataFrame,对应R语言里do.call(rbind, list)的功能,Python中最高效的实现方式是使用pandas的pd.concat()函数。
核心实现代码
import pandas as pd # 示例:构造结构一致的DataFrame列表 df_list = [ pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]}), pd.DataFrame({'col1': [5, 6], 'col2': [7, 8]}), pd.DataFrame({'col1': [9, 10], 'col2': [11, 12]}) ] # 堆叠为单个DataFrame,ignore_index=True重置索引(避免原索引重复) stacked_df = pd.concat(df_list, ignore_index=True)
为什么这是最优解
pd.concat()是pandas原生优化的向量化操作,底层基于C实现,处理大量数据时效率远高于手动循环append。- 手动循环
append的写法(如下)会反复复制整个DataFrame,时间复杂度为O(n²),数据量越大越慢:
# 不推荐的低效写法 stacked_df = pd.DataFrame() for df in df_list: stacked_df = stacked_df.append(df)
处理列不一致的情况
如果列表中DataFrame的列不完全一致,pd.concat()默认会用NaN填充缺失列,和R的rbind行为一致。若只想保留所有DataFrame共有的列,可添加join='inner'参数:
stacked_df = pd.concat(df_list, ignore_index=True, join='inner')
内容的提问来源于stack exchange,提问作者Chan
相关产品推荐
相关产品推荐

