将类型列表的熊猫列转换为dict

时间:2020-05-30 06:42:42

标签: python pandas list dictionary

长度为 n

Pandas列的类型为 list

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 个答案:

答案 0 :(得分:1)

可以有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']))

答案 1 :(得分:0)

如果有:

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

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

您应该使用:

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

如果列表中有多个词典,请增加最后一个索引以访问其余词典。