我正在做一个项目,涉及到通过纬度和经度值的两列。如果一对列中的lat/long为空,那么我需要找出另外两列中的哪对lat/long值(在地理上)最接近目标中的值。数据框如下所示:
origin_lat | origin_lon | destination_lat | destination_lon
----------------------------------------------------------------
20.291326 -155.838488 25.145242 -98.491404
25.611236 -80.551706 25.646763 -81.466360
26.897654 -75.867564 nan nan
我试图建立两个字典,一个与起源拉特和长,另一个与目的地拉特和长,在这种格式:
tmplist = [{'origin_lat': 39.7612992, 'origin_lon': -86.1519681},
{'origin_lat': 39.762241, 'origin_lon': -86.158436 },
{'origin_lat': 39.7622292, 'origin_lon': -86.1578917}]
我要做的是,对于目标lat/lon为空的每一行,将同一行中的原始lat/lon与所有非nan目标lat/lon值的字典进行比较,然后将目标lat/lon字典中地理位置最接近的lat/lon打印到行中,以代替nan值。我一直在尝试创建字典对象列表,但似乎无法以正确的格式构建字典。任何帮助都将不胜感激!
如果df
是您的熊猫。DataFrame
,您可以通过迭代df
的行来生成请求的词典:
origin_dicts = [{'origin_lat': row['origin_lat'], 'origin_long': row['origin_lon']} for _, row in df.iterrows()]
类似于destination_dicts
。
备注:如果创建字典的唯一原因是计算替换nan
-条目的值,则直接在数据框上执行此操作可能更容易,例如:。
df['destination_lon'] = df.apply(find_closest_lon, axis=1)
df['destination_lat'] = df.apply(find_closest_lat, axis=1)
其中find_closes_lon
,find_closes_lat
是接收数据帧行作为参数并访问数据帧原始列值的函数。
您需要的格式是内置的“记录”格式:
df[['origin_lat','origin_lon']].to_dict(orient = 'records')
生产
[{'origin_lat': 20.291326, 'origin_lon': -155.83848799999998},
{'origin_lat': 25.611235999999998, 'origin_lon': -80.55170600000001},
{'origin_lat': 26.897654, 'origin_lon': -75.867564}]
当然你也可以拥有
df[['destination_lat','destination_lon']].to_dict(orient = 'records')
但我同意@ctenar的观点,即您不需要为最终任务生成字典,Pandas为此提供了足够的功能