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

如何向Pandas DataFrame的列中追加数据?

如何向Pandas DataFrame的列中分段追加数据?

我需要向DataFrame中分段组装列数据,首次给列赋值没问题,但不知道怎么把新的Series追加到已有列的对应位置,让新数据接在原数据后面,其余未填充的行保留NaN。

初始代码如下:

import pandas as pd

df = pd.DataFrame()
df["name"] = pd.Series(["A", "B", "C", "D", "E", "F", "G", "H", "I"])
df["data"] = pd.Series([1, 2, 3])

new_data = pd.Series([4, 5, 6])

预期输出:

name  data
0    A   1.0
1    B   2.0
2    C   3.0
3    D   4.0
4    E   5.0
5    F   6.0
6    G   NaN
7    H   NaN
8    I   NaN

我尝试过这些方法,但都没成功:

  • df["data"] += new_data:执行的是元素加法,不是追加数据
  • df["data"] = df["data"].append(new_data):报错ValueError: cannot reindex on an axis with duplicate labels
  • df["data"] = pd.concat([df["data"], new_data]):同样报索引重复的错误
  • 先删除data列再拼接赋值:依然触发索引重复错误
  • df["data"] = pd.concat([df["data"], new_data], ignore_index=True):无报错,但列数据未按预期更新
  • df["data"] = pd.concat([df["data"], new_data], axis=1):报错ValueError: Columns must be same length as key

解决方法

核心问题在于Pandas的索引对齐机制:new_data默认的索引是0、1、2,和原data列的索引完全重复,直接拼接或赋值时,Pandas无法判断这些重复索引对应到DataFrame的哪一行,因此报错或无法正确赋值。

以下两种方法可以解决:

方法一:为新数据设置匹配的索引

找到原data列最后一个有效数据的索引,让新数据的索引从该位置下一位开始,再赋值到对应行:

# 获取data列最后一个非NaN值的索引
last_valid_idx = df["data"].last_valid_index()
# 计算新数据的起始索引
start_idx = last_valid_idx + 1 if last_valid_idx is not None else 0
# 给new_data设置对应索引
new_data.index = range(start_idx, start_idx + len(new_data))
# 赋值到data列
df.loc[new_data.index, "data"] = new_data

方法二:直接定位空行赋值

筛选data列中为NaN的行,取前N个(N为新数据长度)索引,直接把新数据的值填充进去:

# 筛选data列空值的索引,取前len(new_data)个
target_indices = df[df["data"].isna()].index[:len(new_data)]
# 赋值,用.values避免索引干扰
df.loc[target_indices, "data"] = new_data.values

执行任意一种方法后,df都会得到预期的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:46:02