DataFrame из словаря с ключами переменной длины - PullRequest
1 голос
/ 23 апреля 2020

Итак, для этого задания мне удалось создать словарь, в котором ключами являются названия штатов (например, Алабама, Аляска, Аризона), а значениями являются списки регионов для каждого штата. Проблема в том, что списки регионов имеют разную длину, поэтому каждое состояние может иметь различное количество связанных регионов.

Example : 'Alabama': ['Auburn',
  'Florence',
  'Jacksonville',
  'Livingston',
  'Montevallo',
  'Troy',
  'Tuscaloosa',
  'Tuskegee'],
 'Alaska': ['Fairbanks'],
 'Arizona': ['Flagstaff', 'Tempe', 'Tucson'],

Как я могу выгрузить это в pandas Dataframe? То, что я хочу, это в основном 2 столбца - «Штат», «Регион». Нечто подобное тому, что вы получили бы, если бы вы сделали «GroupBy» для состояния для регионов.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Если вы работаете с pandas 0.25+, вы можете использовать explode:

pd.Series(states).explode()

Выход:

Alabama          Auburn
Alabama        Florence
Alabama    Jacksonville
Alabama      Livingston
Alabama      Montevallo
Alabama            Troy
Alabama      Tuscaloosa
Alabama        Tuskegee
Alaska        Fairbanks
Arizona       Flagstaff
Arizona           Tempe
Arizona          Tucson
dtype: object

Вы также можете использовать concat, который работает для самая pandas версия:

pd.concat(pd.DataFrame({'state':k, 'Region':v}) for k,v in states.items())

Вывод:

     state        Region
0  Alabama        Auburn
1  Alabama      Florence
2  Alabama  Jacksonville
3  Alabama    Livingston
4  Alabama    Montevallo
5  Alabama          Troy
6  Alabama    Tuscaloosa
7  Alabama      Tuskegee
0   Alaska     Fairbanks
0  Arizona     Flagstaff
1  Arizona         Tempe
2  Arizona        Tucson
0 голосов
/ 24 апреля 2020

Вы также можете сделать это, разделив словарь на списки. Хотя это будет немного дольше. Например:

Example = {'Alabama': ['Auburn','Florence','Jacksonville','Livingston','Montevallo','Troy','Tuscaloosa','Tuskegee'],
'Alaska': ['Fairbanks'],
 'Arizona': ['Flagstaff', 'Tempe', 'Tucson']}

new_list_of_keys = []
new_list_of_values = []

keys = list(Example.keys())
values = list(Example.values())

for i in range(len(keys)):
  for j in range(len(values[i])):
    new_list_of_values.append(values[i][j])
    new_list_of_keys.append(keys[i])

df = pd.DataFrame(zip(new_list_of_keys, new_list_of_values), columns = ['State', 'Region'])

Это даст вывод как:

   State        Region
0   Alabama        Auburn
1   Alabama      Florence
2   Alabama  Jacksonville
3   Alabama    Livingston
4   Alabama    Montevallo
5   Alabama          Troy
6   Alabama    Tuscaloosa
7   Alabama      Tuskegee
8    Alaska     Fairbanks
9   Arizona     Flagstaff
10  Arizona         Tempe
11  Arizona        Tucson
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...