如何向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 labelsdf["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
相关产品推荐
相关产品推荐

