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
相关产品推荐
相关产品推荐

