<p>这应该管用。顺便说一句,我不知道你具体需要什么时间在数据帧中。因此,我在解决方案中包含了所有这些问题(如果您不确定测量的顺序)</p>
<pre><code>import pandas as pd
import numpy as np
import json
from collections import OrderedDict
json_str = {
"next":"https://wastemanagement.post-iot.lu/measurement/measurements?dateTo=2019-10-28&pageSize=2000&source=83512&dateFrom=2019-10-26&currentPage=2",
"self":"https://wastemanagement.post-iot.lu/measurement/measurements?dateTo=2019-10-28&pageSize=2000&source=83512&dateFrom=2019-10-26&currentPage=1",
"statistics":{
"totalPages":"null",
"currentPage":1,
"pageSize":2000
},
"measurements":[
{
"self":"https://wastemanagement.post-iot.lu/measurement/measurements/108451",
"time":"2019-10-26T00:00:06.494Z",
"id":"108451",
"source":{
"self":"https://wastemanagement.post-iot.lu/inventory/managedObjects/83512",
"id":"83512"
},
"type":"c8y_Measurement",
"battery":{
"percent":{
"unit":"%",
"value":98
}
}
},
{
"self":"https://wastemanagement.post-iot.lu/measurement/measurements/108452",
"time":"2019-10-26T00:00:06.538Z",
"id":"108452",
"source":{
"self":"https://wastemanagement.post-iot.lu/inventory/managedObjects/83512",
"id":"83512"
},
"type":"TemperatureMeasurement",
"c8y_TemperatureMeasurement":{
"T":{
"unit":"C",
"value":23
}
}
},
{
"self":"https://wastemanagement.post-iot.lu/measurement/measurements/108537",
"time":"2019-10-26T00:00:06.577Z",
"id":"108537",
"source":{
"self":"https://wastemanagement.post-iot.lu/inventory/managedObjects/83512",
"id":"83512"
},
"type":"c8y_Measurement",
"c8y_DistanceMeasurement":{
"distance":{
"unit":"cm",
"value":21
}
}
}]
}
#json_str2 = json.dumps(dct)
df = pd.io.json.json_normalize(json_str)
df2 = pd.io.json.json_normalize(
OrderedDict([(str(i), v) for i, v in enumerate(df["measurements"].tolist()[0])]))
# If you are certain that the list always comes in that order
df = pd.concat([df, df2], axis=1)
df[["0.source.id", "2.time","0.battery.percent.value", "1.c8y_TemperatureMeasurement.T.value", "2.c8y_DistanceMeasurement.distance.value"]]
# If you are uncertain of the order
cols = ['0.source.id'] + \
[c for c in df.columns if ('time' in c or 'emperatureMeasurement.T.value' in c or 'DistanceMeasurement.distance.unit' in c or 'battery.percent.value' in c)]
df[cols].head()
</code></pre>