Pandas 1.1.4按行索引将小DataFrame赋值给大DataFrame问题求解
错误原因
Pandas 对DataFrame执行切片赋值操作时,默认会基于行索引做对齐匹配。
你赋值的目标位置是df1的索引37行,而右侧df2的行索引范围是04,对齐时仅能匹配到双方共有的索引3、4对应的值,df1索引5、6、7在df2中找不到对应行,因此被填充为NaN。
正确实现方案
因为你已经确认两个DataFrame列结构完全一致,不需要指定列名,以下两种方案均兼容Pandas 1.1.4版本:
方案1:取NumPy数组赋值(更简洁)
直接通过.values取df2的底层数组,跳过索引对齐逻辑,按位置直接赋值:
df1.iloc[3:3+len(df2)] = df2.values
方案2:对齐索引后赋值
临时将df2的索引替换为目标位置的索引,匹配Pandas默认的对齐规则:
target_idx = df1.index[3:3+len(df2)] df1.loc[target_idx] = df2.set_axis(target_idx)
两种方案运行后都能得到你期望的输出,且支持多列场景,不需要手动指定任何列名,只要保证两个DataFrame列顺序、列数量完全匹配即可。
内容的提问来源于stack exchange,提问作者Gulzar
相关产品推荐
相关产品推荐

