如何基于另外两个DataFrame存储的索引为大型pandas DataFrame赋值
pandas多表关联匹配坐标列报错解决方法
错误原因
- 表名调用错误:坐标数据存储在
DataFrame2中,原有代码错误地从DataFrame1(主表)中读取coords字段,主表本身不存在该字段。 - 赋值方法适配问题:
coords列存储的是元组类型,使用.loc赋值时pandas会将元组识别为多值迭代器,尝试匹配多个赋值位置,因此触发长度不匹配的报错。
解决方法
方法1:修复原有循环逻辑
使用专门用于单个元素赋值的.at方法代替.loc,同时修正表名调用错误即可解决问题:
for idx, rw in dataframe_3.iterrows(): # 从坐标表读取对应坐标值 coords = dataframe_2.loc[rw.index_dataframe_2, "coords"] # 用.at给主表对应位置赋值,避免元组被识别为迭代器 dataframe_1.at[int(rw.index_dataframe_1), "coords"] = coords
方法2:向量化关联写法(更适合大数据量场景)
不需要遍历行,直接通过pandas自带的merge操作完成匹配,性能远高于循环写法:
# 第一步:映射表关联坐标表,获取主表索引对应的坐标数据 map_with_coords = dataframe_3.merge( dataframe_2, left_on="index_dataframe_2", right_index=True )[["index_dataframe_1", "coords"]] # 第二步:将坐标数据合并到主表 dataframe_1 = dataframe_1.merge( map_with_coords.set_index("index_dataframe_1"), left_index=True, right_index=True, how="left" )
内容的提问来源于stack exchange,提问作者Luisa Fernanda Velasquez Camac
相关产品推荐
相关产品推荐

