Как мне преодолеть пропущенные значения при сопоставлении фрейма данных со списком в python?

#python #pandas

Вопрос:

У меня есть большой фрейм данных (называемый df), который содержит некоторые значения для местоположений. Это сокращенная версия:

 locations Value1 Value2 Value3 Value4  0 s-Hertogenbosch 58 2 91 23  1 Aachen 10 2 17 8  2 Aalsmeer 50 50 50 0  

Более того, у меня есть список(называемый списком), содержащий 50 местоположений; некоторые из этих местоположений отображаются во фрейме данных, а некоторые нет. Для каждого местоположения в «Списке» я хочу найти значение 1, соответствующее этому местоположению. Я делаю это, сопоставляя местоположения «списка» и фрейма данных со следующим кодом:

 p=[]  for y in range(50):  p.append(df.loc[df['locations'] == List['Location'][y], 'Value1'].item())  

Для простоты я сначала создаю вектор p, в котором хранится значение 1 каждого местоположения. Этот код работает, когда местоположение, указанное в списке, также можно найти во фрейме данных. Однако. если местоположение, указанное в списке, не может быть найдено в кадре данных, я получаю сообщение об ошибке. Я хотел бы принять значение для этих случаев. Кто-нибудь знает, как это закодировать?

Комментарии:

1. Ты имеешь в виду df.loc[df["locations"].isin(other_location_list), "Value1"] ?

Ответ №1:

Попробуйте это (я привел простой пример):

 import pandas as pd   locations = ['s-Hertogenbosch', 'Aachen', 'Aalsmeer'] v1 = [58, 10, 50] v2 = [2, 2, 50] v3 = [91, 17, 50] v4 = [23, 8, 0] df = pd.DataFrame(locations, columns=['locations']) df['Value1'] = v1 df['Value2'] = v2 df['Value3'] = v3 df['Value4'] = v4  list_with_locations = ['a', 'b', 'c', 'Aachen']  l = list(df[df['locations'].isin(list_with_locations)].Value1)  print(l)  

Комментарии:

1. примите и поддержите этот ответ, если это помогло