首页 > 解决方案 > 将 list 类型的 pandas 列转换为 dict

问题描述

长度为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

标签: pythonpandaslistdictionary

解决方案


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

推荐阅读