如何将字典词典解压缩到结构化DataFrame中

时间:2019-01-17 12:12:19

标签: python pandas dictionary

我有一个包含供应商信息的数据框。其中有一个称为“属性”的列。该字段包含字典的字典,每个字典可能包含不同的键:对数据。我想将这些属性作为列标题解压缩到DataFrame中。

DF = "//mgns1:Champ_supplementaire[mgns1:CODE_CS=2]/mgns1:VALEUR_CS"

一个示例属性单元格:

attributes  companyName id
4   [{'attributeName': 'File Discount', 'attribute...   Ace 130
13  [{'attributeName': 'Payment Terms', 'attribute...   B66ks   240

我希望它从“ attributeName”创建一个DF列标题,并将值作为“ attributeValue”。 因此,在此示例中,它将返回“文件折扣”和“返回”的标头,以及“ 15”和“全部SOR”的值。

我如何最好地解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以使用提取的attributeNameattributeValue值为每一行创建新字典,并使用join添加所有原始列:

a = [{'attributeName': 'File Discount',
  'attributeType': 'int',
  'attributeValue': '15'},
 {'attributeName': 'Returns',
  'attributeType': 'text',
  'attributeValue': 'Full SOR on all'}]

b = [{'attributeName': 'File',
     'attributeType': 'int',
     'attributeValue': '48'}]

df = pd.DataFrame({'companyName':['Ace','B66ks'],
                   'attributes':[a,b],
                   'id':[130,240]})
print (df)
  companyName                                         attributes   id
0         Ace  [{'attributeName': 'File Discount', 'attribute...  130
1       B66ks  [{'attributeName': 'File', 'attributeType': 'i...  240

L = [{y.get('attributeName'):y.get('attributeValue') for y in v} 
      for k, v in df.pop('attributes').items()]
print (L)
[{'File Discount': '15', 'Returns': 'Full SOR on all'}, {'File': '48'}]

df1 = pd.DataFrame(L, index=df.index).join(df)
print (df1)
  File File Discount          Returns companyName   id
0  NaN            15  Full SOR on all         Ace  130
1   48           NaN              NaN       B66ks  240

答案 1 :(得分:0)

有一个熊猫函数,可以在数据框上使用unstack()和stack() 这是文档的链接: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.stack.html