Преобразуйте элементы словаря в строки фрейма данных Pandas, где ключи - это кортежи, а значения - целые числа. - PullRequest
0 голосов
/ 30 октября 2018

У меня есть следующий словарь:

d = {("Sam","Scotland","23") : 25,
     ("Oli","England","23") : 28,
     ("Ethan","Wales","18") : 19}

Я хотел бы преобразовать его во фрейм данных панд, который бы выглядел так:

Name    Country    Age    Count
Sam     Scotland    23     25
Oli     England     23     28
Ethan   Wales       18     19

Я пытался сделать это так:

df = pd.DataFrame.from_items(d.items(),orient="index",
                              columns=["Name","Country","Age","Count"])

Но я получаю эту ошибку:

ValueError: The value in each (key, value) pair must be an array, Series, or dict

Я ценю, что это было бы возможно, просматривая каждый элемент и каждый элемент кортежа, но есть ли более чистый способ сделать это?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы можете использовать pd.DataFrame.from_dict со словарем напрямую . Это создает ключ tuple из ваших входных словарных ключей. Вы можете преобразовать это в MultiIndex, затем использовать reset_index:

cols = ['Name', 'Country', 'Age', 'Count']

df = pd.DataFrame.from_dict(d, orient='index', columns=cols[-1])
df.index = pd.MultiIndex.from_tuples(df.index, names=cols[:-1])
df = df.reset_index()
0 голосов
/ 30 октября 2018

Вы можете построить строки DataFrame вручную, объединив ключ и значение, например, так:

import pandas as pd

d = {("Sam", "Scotland", "23"): 25,
     ("Oli", "England", "23"): 28,
     ("Ethan", "Wales", "18"): 19}

df = pd.DataFrame([k + (v,) for k, v in d.items()], columns=['name', 'country', 'age', 'count'])
print(df)

выход

    name   country age  count
0  Ethan     Wales  18     19
1    Sam  Scotland  23     25
2    Oli   England  23     28

Или как альтернатива:

import pandas as pd

d = {("Sam", "Scotland", "23"): 25,
     ("Oli", "England", "23"): 28,
     ("Ethan", "Wales", "18"): 19}

df = pd.DataFrame(
    [{"name": name, "country": country, "age": age, "count": value} for (name, country, age), value in d.items()])

print(df)

выход

  age  count   country   name
0  23     28   England    Oli
1  23     25  Scotland    Sam
2  18     19     Wales  Ethan

Идея состоит в том, чтобы преобразовать пары ключ-значение в список словарей и затем передать его в DataFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...