python pandas dataframe стовпці перетворюють у ключ і значення dict


94

У мене є кадр даних pandas з декількома стовпцями, і я хотів би побудувати дикт із двох стовпців: один як ключі дикту, а інший як значення дикту. Як я можу це зробити?

Кадр даних:

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

Мені потрібно визначити область як ключ, порахувати як значення в дикті. Спасибі заздалегідь.

Відповіді:


217

Якщо lakesваш DataFrame, ви можете зробити щось на зразок

area_dict = dict(zip(lakes.area, lakes.count))

1
У версії 0.17.1 отримати помилку:TypeError: zip argument #2 must support iteration
jezrael

20
Рішення:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael

1
Інші відповіді на це запитання stackoverflow.com/questions/18695605/…
Бен Фултон,

1
Що робити, якщо ви хочете, щоб у значеннях словника було більше одного стовпця? Я думаю щось на зразок area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column))). Як би ви зробили це?
Джессі Маркс

2
Якщо другий аргумент має кілька значень, це не буде працювати.
pnv

10

З пандами це можна зробити як:

Якщо озером є ваш DataFrame:

area_dict = lakes.to_dict('records')

1
у даному прикладі немає стовпця "записи". Також у такому випадку індекс буде ключовим, а не тим, що ми хочемо.
Michael D

11
@MichaelD 'записи' не є стовпцем. Це варіант аргументу orient.
Zheng Liu

2

Ви також можете зробити це, якщо хочете пограти з пандами. Однак мені подобається спосіб punchagan.

# 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}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.