提问者:小点点

从列表创建字典项列表


我正在做一个项目,涉及到通过纬度和经度值的两列。如果一对列中的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值。我一直在尝试创建字典对象列表,但似乎无法以正确的格式构建字典。任何帮助都将不胜感激!


共2个答案

匿名用户

如果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_lonfind_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为此提供了足够的功能