kolumny dataframe python pandas są konwertowane na klucz i wartość dict

91

Mam ramkę danych pandy z wieloma kolumnami i chciałbym skonstruować dyktę z dwóch kolumn: jednej jako kluczy dykta, a drugiej jako wartości dyktu. Jak mogę to zrobić?

Ramka danych:

           area  count
co tp
DE Lake      10      7
Forest       20      5
FR Lake      30      2
Forest       40      3

Muszę zdefiniować obszar jako klucz, liczyć jako wartość w dict. Z góry dziękuję.

perygeum
źródło

Odpowiedzi:

212

Jeśli lakesjest twój DataFrame, możesz zrobić coś takiego

area_dict = dict(zip(lakes.area, lakes.count))
punchagan
źródło
1
W wersji 0.17.1 otrzymujemy błąd:TypeError: zip argument #2 must support iteration
jezrael
19
Rozwiązanie:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael
1
Inne odpowiedzi na to pytanie stackoverflow.com/questions/18695605/…
Ben Fulton
1
Co by było, gdybyś chciał, aby w wartościach słownikowych znajdowała się więcej niż jedna kolumna? Myślę o czymś takim area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column))). Jak byś to zrobił?
Jesse Marks
2
Jeśli drugi argument ma wiele wartości, to nie zadziała.
pnv
9

Z pandami można to zrobić jako:

Jeśli Twoje DataFrame to jeziora:

area_dict = lakes.to_dict('records')
user2643517
źródło
1
w podanym przykładzie nie ma kolumny „rekordy”. Również w takim przypadku kluczem będzie indeks, a nie to, czego chcemy.
Michael D
11
@MichaelD 'rekordy' nie jest kolumną. To opcja dla argumentu orient.
Zheng Liu
2

Możesz to również zrobić, jeśli chcesz bawić się z pandami. Jednak lubię sposób punchagana.

# replicating your dataframe
lake = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lake.set_index('co tp', inplace=True)

# to get key value using pandas
area_dict = lake.set_index('area').T.to_dict('records')[0]
print(area_dict)

output: {10: 7, 20: 5, 30: 2, 40: 3}
SammyRod
źródło