У меня есть фрейм данных под названием la_crime_refined, который выглядит следующим образом:

    DR_NO       AREA NAME   LOCATION              LAT       LON
0   10304468    Southwest   1100 W 39TH PL        34.0141   -118.2978
1   190101086   Central     700 S HILL ST         34.0459   -118.2545
2   201418201   Pacific     4700 LA VILLA MARINA  33.9813   -118.4350
3   191501505   N Hollywood 5400 CORTEEN PL       34.1685   -118.4019
4   191921269   Mission     14400 TITUS ST        34.2198   -118.4468

Я хочу создать словарь, включающий широту и долготу с уникальным ключом: index. Я пробовал это:

crime_cord = la_crime_refined[['LAT','LON']].to_dict(orient='index')

Однако он возвращает имена ключей «LAT» и «LON» для каждой записи в словаре.

{0:{'LAT':34.0141,'LON',-118.2978},1:{...}...}

Есть ли способ получить такой вывод:

{0:(34.0141,-118.2978),1:(...)...}

Спасибо!

1
dvazqgu 23 Ноя 2020 в 15:52

3 ответа

Лучший ответ

Если вы не возражаете сделать дополнительный шаг, вы можете просто перебрать словарь, полученный с помощью to_dict - метода:

res = {}
for k, v in la_crime_refined[['LAT','LON']].to_dict(orient='index').items():
    res[k] = (v['LAT'], v['LON'])

В качестве альтернативы вы можете перебирать строки фрейма данных (цикл или понимание dict), например

res = {idx: (row['LAT'], row['LON']) for idx, row in la_crime_refined.iterrows()}
2
ctenar 23 Ноя 2020 в 13:15

Поскольку у вас уже есть формат в {'LAT' = X, 'LON' = Y}, самым простым способом может быть просто использовать его в качестве основы для создания желаемого формата:

old_format = {0:{'LAT':34.0141,'LON':-118.2978}, 1:{'LAT':50.0141,'LON':-120.2978}, 2:{'LAT':60,'LON':-130}}
print(old_format)
new_format = {}
for key in old_format.keys():
    new_format[key] = (old_format[key]['LAT'], old_format[key]['LON'])        
print(new_format)
1
Shamis 23 Ноя 2020 в 13:02

Попробуйте понимание словаря:

{k: tuple(v.values()) for k, v in crime_cord.items()}
1
rftr 23 Ноя 2020 в 13:03
64968798