Преобразовать pandas столбец списка типов в dict - PullRequest
0 голосов
/ 30 мая 2020

Pandas столбец длиной n имеет тип список .

df['size'][0] = [{'Name': 'Total', 'Value': 50, 'Unit': 'Units'}]

type(df['Size'][0]) 
list

Я хочу преобразовать список в словарь. т.е. type(df['Size'][0]) dict.

{'Name': 'Total', 
 'Value': 50, 
 'Unit': 'Units'}

Для контекста я пытаюсь разбить словарь на несколько столбцов.

   # Unpack Size

   for i, row in df.iterrows():

       if type(row['Size'][i]) is dict:

           dict_obj = row['Size'][i]

           for key, val in dict_obj.items():

                if key == 'Name':
                   df.loc[index, 'Size_Name'] = val

                if key == 'Value':
                   df.loc[index, 'Size_Value'] = val

                if key == 'Unit':
                   df.loc[index, 'Size_Unit'] = val

Ответы [ 2 ]

1 голос
/ 30 мая 2020

может быть n словарей.

Если у вас произвольное количество словарей в списке, используйте df.explode

df = pd.DataFrame({'size':[[{'a':1},{'b':1}],[{'a':2}],[{'c':2},{'d':2},{'e':4}]]})

df
                             size
0            [{'a': 1}, {'b': 1}]
1                      [{'a': 2}]
2  [{'c': 2}, {'d': 2}, {'e': 4}]

df.explode('size')

       size
0  {'a': 1}
0  {'b': 1}
1  {'a': 2}
2  {'c': 2}
2  {'d': 2}
2  {'e': 4}

Если это всегда список из одного словаря, например df['size'][x] = [{...}], используйте itertools.chain.from_iterable

from itertools import chain

df['size'] = list(chain.from_iterable(df['size']))
0 голосов
/ 30 мая 2020

Если у вас есть:

df['size'][0] = [{'Name': 'Total', 'Value': 50, 'Unit': 'Units'}]

type(df['Size'][0]) 
list

, вы должны использовать:

type(df['Size'][0][0]) 
dict

А если у вас несколько словарей в списке, увеличьте последний индекс, чтобы получить доступ к остальным им.

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