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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:35:23