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

Pandas从另一DataFrame添加列报错问题求助

解决方法

方案1:按位置直接赋值(跳过索引对齐)

不依赖索引匹配,直接将df2列的数值按位置写入df1,长度不足的位置自动补NaN:

import pandas as pd

df1 = pd.DataFrame({'carno': [101, 102, 103, 101], 'sales': [1, 2, 6, 8]})
df2 = pd.DataFrame({'jeepno': [107, 108], 'jsales': [3, 9]})

# 直接用数组赋值,忽略索引
df1['jeepno'] = df2['jeepno'].values
df1['jsales'] = df2['jsales'].values

执行后结果:

carno  sales  jeepno  jsales
0    101      1   107.0     3.0
1    102      2   108.0     9.0
2    103      6     NaN     NaN
3    101      8     NaN     NaN

方案2:使用concat列拼接

通过pd.concat按列合并两个DataFrame,自动补全短列的NaN:

# 重置df2索引确保和df1默认索引对齐
df1 = pd.concat([df1, df2.reset_index(drop=True)], axis=1)

方案3:显式重新索引df2列

将df2的列重新对齐到df1的索引,自动填充NaN后再赋值:

df1['jeepno'] = df2['jeepno'].reindex(df1.index)
df1['jsales'] = df2['jsales'].reindex(df1.index)
报错原因

Python3.6通常搭配低版本的pandas(如0.23.x及更早),这类版本对索引对齐的校验更严格:当直接赋值长度更短的Series到DataFrame时,若两者索引无法完全匹配(或目标DataFrame存在重复索引),就会抛出ValueError: cannot reindex from a duplicate axis。而Python3.10搭配的高版本pandas(如1.0+)会自动将未匹配的索引位置填充为NaN,因此不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:05:23