我有一个包含供应商信息的数据框。其中有一个称为“属性”的列。该字段包含字典的字典,每个字典可能包含不同的键:对数据。我想将这些属性作为列标题解压缩到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”的值。
我如何最好地解决这个问题?
答案 0 :(得分:1)
您可以使用提取的attributeName
和attributeValue
值为每一行创建新字典,并使用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