规范化可能包含json文本的pandas列



我希望将包含json数据的列扩展到现有数据帧中的新列中。我认为我面临的部分挑战是,并非数据帧中的所有行都包含json列中的条目,也并非json中的所有组合键都是已知的,即我无法提前定义列标题列表。

这就是我迄今为止所尝试的:

df2 = pd.json_normalize(df1['additionalInfo'])

我在其他帖子和工作中看到了上面的命令,它适用于简单的数据集,但当我将其应用于我的数据集时,我会得到以下错误:

AttributeError: 'NoneType' object has no attribute 'values'

我还尝试过使用从json中只提取我需要的字段

df1['VCPUs'] = df1.apply(lambda x: json.loads(x['additionalInfo'])['VCPUs'], axis=1)

只有当df中的每一行都在additionalInfo列中的json中包含一个VCPU字段时,上面的w才有效,而在我的数据集中不是这样。

我使用的数据集是一个azure使用文件,大小为几GB,有55列。

以下是AdditionalInfo列的消毒样本提取物:

{"AccountName":"pidbastest","PoolName":"系列池","VMName":"dsdfasad","ConfigType":"虚拟机","节点类型":"专用","池分配模式":"批处理服务","使用类型":"DataTrIn"、"VCPU":"0"、"UsageRecei"veTime":"2020-06-04T00:52:01Z"}


{"AccountName":"asfdasfssa","PoolName":"并行池","VMName":"asdfasdfdsa","ConfigType":"虚拟机","节点类型":"专用","池分配模式":"批处理服务","服务类型";:"Standard_E4_v3","UsageType":"ComputeHR"&"VCPU":"4〃"UsageReceiveTime":"2020-06-03T03:05:12Z"}
NULL{"使用类型":"DataTrOut","ImageType":null,"ServiceType":null,"VMName":null;"VMProperties":null、"VCPU":0、"CPU":0}{"vCores":4,"SLO":"SQLDB_GP_Gen4_4","UniqueResourceId":"dsafdasfsda","AHUB":"False"}
NULL
NULL{"使用类型":"DataTrOut","ImageType":null,"ServiceType":null,"VMName":null;"VMProperties":null、"VCPU":0、"CPU":0}
{"AccountName":"afdads","PoolName":"asdfasdfsdf","VMName":"dsafsdffsfsdfd","ConfigType":"VirtualMachine","NodeType":"专用","PoolAllocationMode":"BatchService","UsageType":"loadBalancers","UsageReceiveTime":"2020-06-03T15:51:18Z"}
NULL
NULL

我需要将7个字段转换为列,理想情况下,我只想为这7个字段创建列,但如果这不可能,则为整个df中json列中的每个字段创建一列是可以接受的,尽管效率较低。

此示例将使用json.loads解析非空列,然后将数据放入额外的列中:

import json
mask = df['additionalInfo'].notna()
df.loc[mask, 'additionalInfo'] = df.loc[mask, 'additionalInfo'].apply(json.loads)
df = pd.concat([df, df.pop('additionalInfo').apply(pd.Series).add_prefix('ai_')], axis=1)
df = df.fillna('')
print(df.to_markdown(index=False))

打印:

ai_UniqueResourceIdai_AHUB>dsdfasadirtualMachine><1td>0td style="text-align:left;">td style="text-align:left;">td style="text-align:left;">afdads
ai_AccountNameai_UsageType th>ai_vCores="text align:left;">ai_SLO
pidastest系列池专用BatchService20200-06-04T00:52:01Z
asfdasfssa2020-06-03T03:05:12Z
2020-06-06-03T15:51:18Z
Standard_E8s_v3

最新更新