python - 如何将字典解压成结构化的DataFrame
问题描述
我有一个包含供应商信息的数据框。其中有一个名为“属性”的列。该字段包含一个字典字典,每个字典都可能包含不同的键:对数据。我想将这些属性作为列标题解压缩到 DataFrame 中。
东风 =attributes companyName id
4 [{'attributeName': 'File Discount', 'attribute... Ace 130
13 [{'attributeName': 'Payment Terms', 'attribute... B66ks 240
一个示例属性单元格:
[{'attributeName': 'File Discount',
'attributeType': 'int',
'attributeValue': '15'},
{'attributeName': 'Returns',
'attributeType': 'text',
'attributeValue': 'Full SOR on all'}]
我希望它从“attributeName”创建一个 DF 列标题,并将值作为“attributeValue”。因此,在此示例中,它将返回“文件折扣”和“返回”的标题以及“15”和“全部 SOR”的值。
我如何最好地解决这个问题?
解决方案
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
推荐阅读
- powershell - Powershell“您必须在'-'运算符之后提供一个值表达式”
- python - Numpy点云图像
- html - 有没有办法通过仅使用 CSS 或 HTML 而没有 Javascript 来淡入滚动动画?
- javascript - 客户端相对寻址并且不允许在应用程序 URL 中使用斜杠
- java - 从 Firestore 存储信息后,阵列列表自动清除
- javascript - 尝试在操作中使用异步代码时的最佳实践
- excel - 有没有办法使用 Excel 作为库而不是 Apache POI
- c# - CSharp.Workspaces 的 RuntimeCompilation 依赖问题
- python - OpenCV:在圆圈内找到小黑(黑)点
- python-3.x - TkInter 的 __init__ 说全局变量不存在