当键因记录而异时,使用熊猫规范化嵌套json
我有一个嵌套的json数据集,示例如下。每口井的属性各不相同。当密钥在不同情况下发生变化时,如何将该数据规范化为数据帧?我希望没有键的行显示为空 {韦利德:3。 属性:[ 名称:xxx,值,yyy .... ..]} 样本数据:当键因记录而异时,使用熊猫规范化嵌套json,json,pandas,nested,normalize,Json,Pandas,Nested,Normalize,我有一个嵌套的json数据集,示例如下。每口井的属性各不相同。当密钥在不同情况下发生变化时,如何将该数据规范化为数据帧?我希望没有键的行显示为空 {韦利德:3。 属性:[ 名称:xxx,值,yyy .... ..]} 样本数据: [{'WellID': 3, 'Attributes': [{'Name': 'Production Start Date', 'Value': '5/17/2012 12:00:00 AM'}, {'Name': 'Latitude', 'Value
[{'WellID': 3,
'Attributes': [{'Name': 'Production Start Date',
'Value': '5/17/2012 12:00:00 AM'},
{'Name': 'Latitude', 'Value': '36.594260510'},
{'Name': 'Longitude', 'Value': '-97.706833870'},
{'Name': 'Has Plunger', 'Value': 'True'},
{'Name': 'Has Flare', 'Value': 'True'},
{'Name': 'Has VRU', 'Value': 'True'},
{'Name': 'State', 'Value': 'OK'},
{'Name': 'Country', 'Value': 'USA'},
{'Name': 'County', 'Value': '047'},
{'Name': 'Alcohol Injector', 'Value': 'False'},
{'Name': 'Shut In', 'Value': 'False'},
{'Name': 'Active', 'Value': 'True'}]},
{'WellID': 4,
'Attributes': [{'Name': 'Production Start Date',
'Value': '5/31/2012 12:00:00 AM'},
{'Name': 'Latitude', 'Value': '36.564503337'},
{'Name': 'Longitude', 'Value': '-97.600837012'},
{'Name': 'State', 'Value': 'OK'},
{'Name': 'Country', 'Value': 'USA'},
{'Name': 'County', 'Value': '047'},
{'Name': 'Alcohol Injector', 'Value': 'False'},
{'Name': 'Shut In', 'Value': 'False'},
{'Name': 'Active', 'Value': 'True'}]},
{'WellID': 5,
'Attributes': [{'Name': 'Production Start Date',
'Value': '8/18/2012 12:00:00 AM'},
{'Name': 'Latitude', 'Value': '36.592378770'},
{'Name': 'Longitude', 'Value': '-97.725740930'},
{'Name': 'Has Plunger', 'Value': 'True'},
{'Name': 'Has Flare', 'Value': 'True'},
{'Name': 'Has VRU', 'Value': 'True'},
{'Name': 'State', 'Value': 'OK'},
{'Name': 'Country', 'Value': 'USA'},
{'Name': 'County', 'Value': '047'},
{'Name': 'Alcohol Injector', 'Value': 'False'},
{'Name': 'Shut In', 'Value': 'True'},
{'Name': 'Active', 'Value': 'True'}]},
{'WellID': 6,
'Attributes': [{'Name': 'Latitude', 'Value': '36.572665500'},
{'Name': 'Longitude', 'Value': '-97.672614600'},
{'Name': 'State', 'Value': 'OK'},
{'Name': 'Country', 'Value': 'USA'},
{'Name': 'County', 'Value': '047'},
{'Name': 'Alcohol Injector', 'Value': 'False'},
{'Name': 'Shut In', 'Value': 'False'},
{'Name': 'Active', 'Value': 'True'}]},
{'WellID': 7,
'Attributes': [{'Name': 'Latitude', 'Value': '36.562985200'},
{'Name': 'Longitude', 'Value': '-97.617945400'},
{'Name': 'State', 'Value': 'OK'},
{'Name': 'Country', 'Value': 'USA'},
{'Name': 'County', 'Value': '047'},
{'Name': 'Alcohol Injector', 'Value': 'False'},
{'Name': 'Shut In', 'Value': 'False'},
{'Name': 'Active', 'Value': 'True'}]}]
我试着用这句话:
result = json_normalize(subset, 'Attributes',['WellID'], errors='ignore')
但它会导致以下结果,这并不是平坦的:
Name Value WellID
0 Production Start Date 5/17/2012 12:00:00 AM 3
1 Latitude 36.594260510 3
2 Longitude -97.706833870 3
3 Has Plunger True 3
4 Has Flare True 3
5 Has VRU True 3
6 State OK 3
7 Country USA 3
8 County 047 3
9 Alcohol Injector False 3
10 Shut In False 3
11 Active True 3
12 Production Start Date 5/31/2012 12:00:00 AM 4
13 Latitude 36.564503337 4
14 Longitude -97.600837012 4
15 State OK 4
16 Country USA 4
17 County 047 4
18 Alcohol Injector False 4
19 Shut In False 4
20 Active True 4
21 Production Start Date 8/18/2012 12:00:00 AM 5
22 Latitude 36.592378770 5
23 Longitude -97.725740930 5
24 Has Plunger True 5
25 Has Flare True 5
26 Has VRU True 5
27 State OK 5
28 Country USA 5
29 County 047 5
30 Alcohol Injector False 5
31 Shut In True 5
32 Active True 5
33 Latitude 36.572665500 6
34 Longitude -97.672614600 6
35 State OK 6
36 Country USA 6
37 County 047 6
38 Alcohol Injector False 6
39 Shut In False 6
40 Active True 6
41 Latitude 36.562985200 7
42 Longitude -97.617945400 7
43 State OK 7
44 Country USA 7
45 County 047 7
46 Alcohol Injector False 7
47 Shut In False 7
48 Active True 7
请告知如何将其转换为以下格式:
井号|纬度|经度|状态|。。。。等
我现在有一个数据集,在井ID标签上有多个字段。有没有一种方法可以将所有这些字段都输入到数据框中,而不必手动全部输入
谢谢,您是否只想将结果数据帧作为轴心点?如果是这样,这里有一个如何做到这一点的最低限度的例子 以长表格式创建数据,类似于标准化的json:
import pandas as pd
data = pd.DataFrame({'name': ['lat', 'long', 'country', 'active', 'state'], 'value': [90, 90, 'US', True, 'OH'], 'id': 2})
data
以下是我们的数据:
然后,要旋转,请使用:
pivoted = data.pivot(index = 'id', columns = 'name')
pivoted
给出:
您是否只想旋转结果数据帧?如果是这样,这里有一个如何做到这一点的最低限度的例子 以长表格式创建数据,类似于标准化的json:
import pandas as pd
data = pd.DataFrame({'name': ['lat', 'long', 'country', 'active', 'state'], 'value': [90, 90, 'US', True, 'OH'], 'id': 2})
data
以下是我们的数据:
然后,要旋转,请使用:
pivoted = data.pivot(index = 'id', columns = 'name')
pivoted
给出:
您可以在
json\u规范化之后尝试.pivot
from pandas.io.json import json_normalize
df1 = json_normalize(your_data, meta=['WellID'], record_path=['Attributes'])
df2 = df1.pivot(index='WellID', columns='Name', values='Value')
print(df2)
# Output
# Name Active Alcohol Injector Country County Has Flare Has Plunger Has VRU \
# WellID
# 3 True False USA 047 True True True
# 4 True False USA 047 None None None
# 5 True False USA 047 True True True
# 6 True False USA 047 None None None
# 7 True False USA 047 None None None
#
# Name Latitude Longitude Production Start Date Shut In State
# WellID
# 3 36.594260510 -97.706833870 5/17/2012 12:00:00 AM False OK
# 4 36.564503337 -97.600837012 5/31/2012 12:00:00 AM False OK
# 5 36.592378770 -97.725740930 8/18/2012 12:00:00 AM True OK
# 6 36.572665500 -97.672614600 None False OK
# 7 36.562985200 -97.617945400 None False OK
您可以在json\u normalize
之后尝试.pivot
from pandas.io.json import json_normalize
df1 = json_normalize(your_data, meta=['WellID'], record_path=['Attributes'])
df2 = df1.pivot(index='WellID', columns='Name', values='Value')
print(df2)
# Output
# Name Active Alcohol Injector Country County Has Flare Has Plunger Has VRU \
# WellID
# 3 True False USA 047 True True True
# 4 True False USA 047 None None None
# 5 True False USA 047 True True True
# 6 True False USA 047 None None None
# 7 True False USA 047 None None None
#
# Name Latitude Longitude Production Start Date Shut In State
# WellID
# 3 36.594260510 -97.706833870 5/17/2012 12:00:00 AM False OK
# 4 36.564503337 -97.600837012 5/31/2012 12:00:00 AM False OK
# 5 36.592378770 -97.725740930 8/18/2012 12:00:00 AM True OK
# 6 36.572665500 -97.672614600 None False OK
# 7 36.562985200 -97.617945400 None False OK
在json_normalize函数中,如果我在元级别上有多个字段要抓取,我是否必须全部键入,或者是否有方法指定所有字段?正如我所知,您必须列出所有字段。在json_normalize函数中,如果我在元级别上有多个字段要抓取,我必须把它们全部打印出来,还是有办法把它们全部指定出来?我知道,你必须把它们全部列出。