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

如何在for循环中向pandas.DataFrame追加行?循环后仅存最后一行问题求助

解决pandas循环追加行后仅保留最后一条记录的问题

我一眼就看出问题出在哪了,咱们一步步拆解:

你的代码里的两个核心问题

  1. 每次循环都覆盖了dd变量:你在循环内部每次都用pd.DataFrame(...)重新创建了dd,这就导致之前循环生成的内容全被覆盖了,最后自然只剩最后一次循环的结果。
  2. append操作没有生效:pandas的append()方法(现在已经被标记为弃用了)是返回一个新的DataFrame对象,不会修改原有的dd。而且你写的dd.append(dd)其实是把当前的dd追加给自己,完全不是你想要的“添加新行”的效果。

两种正确的实现方式

方式一:提前初始化空DataFrame,用concat追加(推荐用于小数据量)

如果你的active_brain_regions元素不多,可以先建一个空的DataFrame,然后循环里把每一行的小DataFrame合并进去:

# 先初始化带列名的空DataFrame
dd = pd.DataFrame(columns=['region', 'mean expr', 'gene_id'])

for i in active_brain_regions:
    indices = np.where(LM == i)
    expr = gene[indices]
    mean = np.mean(expr)
    # 生成当前行的DataFrame
    new_row = pd.DataFrame([[i, mean, "nifti"]], columns=['region', 'mean expr', 'gene_id'])
    # 用concat合并并重新赋值给dd,ignore_index=True重置索引
    dd = pd.concat([dd, new_row], ignore_index=True)

方式二:先收集数据到列表,最后一次性生成DataFrame(更高效)

当数据量比较大的时候,循环里反复修改DataFrame会有性能损耗,最好先把所有行的数据存在列表里,最后再一次性创建DataFrame:

# 初始化空列表存每一行的数据
data_rows = []

for i in active_brain_regions:
    indices = np.where(LM == i)
    expr = gene[indices]
    mean = np.mean(expr)
    # 把当前行的三个值加入列表
    data_rows.append([i, mean, "nifti"])

# 最后用列表直接生成DataFrame
dd = pd.DataFrame(data_rows, columns=['region', 'mean expr', 'gene_id'])

这样运行后,你就能得到包含所有region行的DataFrame了,和你期望的格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:29:11