我一直在与Python相关的问题(或挑战)斗争了很长一段时间。现在我相信我应该从你们那里得到一些帮助或提示。
在attached file中,您将找到一个JSON文件对象,其中包含我正在处理的数据。我使用以下代码行加载数据:
with open('json_data.json','r') as openfile:
json_object = json.load(openfile)
字符串
现在,当查看json_object
时,您将注意到许多相关信息,例如2D维度中的单元格数量,Numx
和Numy
。现在,我感兴趣的键/参数是data
键,即json_object['data']
。此参数是一个列表项,保存Numx
x x x 1 m6n1x字典示例,并保存每个示例的X和Y坐标。每个示例还保存第3维,即键Data
中的时间维,它是一个列表项,保存n个时间步长的值。这可能很明显,但我觉得我应该提到每个坐标示例的时间戳都是相同的。
因此,总而言之,对于每个坐标,都有一个带值的时间序列,我想使用numpy
将其转换为3D维网格。我该怎么做?
我尝试将data
键转换为Pandas DataFrame:
df = pd.json_normalize(json_object["data"], record_path =["Data"],meta=["X","Y"])
型
这给了我一个DataFrame,其值对应于给定的时间步长和坐标。但我不知道如何继续-我如何把它变成一个3D网格?
然后我尝试循环每个时间戳,所以我会有n个时间步长的2D网格。但后来我挣扎着如何实现时间,以使它三维。
timeStamps = [t['Time'] for t in data_json['data'][0]['Data']]
dfTimestamps = {}
for i,ts in enumerate(timeStamps):
dfTimestamps[ts] = {}
X = []
Y = []
vals = []
for d in data_json['data']:
X.append(d['X'])
Y.append(d['Y'])
vals.append(d['Data'][i]['Value'])
dfTimestamps[ts]['X'] = X
dfTimestamps[ts]['Y'] = Y
dfTimestamps[ts]['Value'] = vals
型
编辑:我将尝试从下面的JSON文件对象中编写一些示例数据。
{'info': {'Parameters': None,
'Unit': 'mm/hour',
'Location': 'Input geojson',
'Point': {'IdPoints': 0,
'Name': None,
'Description': None,
'X': 571125,
'Y': 6225625,
'EPSG': None,
'Latitude': 0,
'Longitude': 0,
'CreatedDatetime': '0001-01-01T00:00:00',
'OrganizationId': None,
'ResponsibleUserId': None,
'Id': 0},
'PointId': None,
'ParameterId': 'Rainintensity, id: 204',
'Timezone': 'UTC',
'DataSource': 'X-band Sabro, RadarId: {303}',
'EPSG': '32632',
'CreatedDateTime': '2023-07-13T13:55:18.9099301Z',
'AllPoints': False,
'dxdy': 250,
'Numx': 7,
'Numy': 6,
'X0': 0,
'Y0': 0,
'MissingSteps': 0,
'ProcessQuality': [{'qualityIndex': 0,
'qualityDescription': 'No problem detected',
'qualitySteps': 3241,
'missingSteps': None,
'fromUTC': '2023-07-10T00:00:00',
'toUTC': '2023-07-12T06:00:00'}]},
'data': [{'X': 572125,
'Y': 6226875,
'Data': [{'Time': '2023-07-10T00:00:00', 'Value': 0},
{'Time': '2023-07-10T00:01:00', 'Value': 0},
{'Time': '2023-07-10T00:02:00', 'Value': 0},
{'Time': '2023-07-10T00:03:00', 'Value': 0},
{'Time': '2023-07-10T00:04:00', 'Value': 0},
{'Time': '2023-07-10T00:05:00', 'Value': 0},
{'Time': '2023-07-10T00:06:00', 'Value': 0},
{'Time': '2023-07-10T00:07:00', 'Value': 0},
{'Time': '2023-07-10T00:08:00', 'Value': 0.399},
{'Time': '2023-07-10T00:09:00', 'Value': 0},
{'Time': '2023-07-10T00:10:00', 'Value': 0},
{'Time': '2023-07-10T00:11:00', 'Value': 0},
...
{'Time': '2023-07-10T16:37:00', 'Value': 0.299},
{'Time': '2023-07-10T16:38:00', 'Value': 0},
{'Time': '2023-07-10T16:39:00', 'Value': 0},
...]},
{'X': 572125,
'Y': 6226875,
'Data': [{'Time': '2023-07-10T00:00:00', 'Value': 0},
{'Time': '2023-07-10T00:01:00', 'Value': 0},
{'Time': '2023-07-10T00:02:00', 'Value': 0},
{'Time': '2023-07-10T00:03:00', 'Value': 0},
{'Time': '2023-07-10T00:04:00', 'Value': 0},
{'Time': '2023-07-10T00:05:00', 'Value': 0},
{'Time': '2023-07-10T00:06:00', 'Value': 0},
{'Time': '2023-07-10T00:07:00', 'Value': 0},
{'Time': '2023-07-10T00:08:00', 'Value': 0.399},
{'Time': '2023-07-10T00:09:00', 'Value': 0},
{'Time': '2023-07-10T00:10:00', 'Value': 0},
...
{'Time': '2023-07-10T16:37:00', 'Value': 0.299},
{'Time': '2023-07-10T16:38:00', 'Value': 0},
{'Time': '2023-07-10T16:39:00', 'Value': 0},
...]},
{'X': 571125,
'Y': 6226125,
'Data': [{'Time': '2023-07-10T00:00:00', 'Value': 0},
{'Time': '2023-07-10T00:01:00', 'Value': 0},
{'Time': '2023-07-10T00:02:00', 'Value': 0.259},
{'Time': '2023-07-10T00:03:00', 'Value': 0},
{'Time': '2023-07-10T00:04:00', 'Value': 0},
{'Time': '2023-07-10T00:05:00', 'Value': 0.321},
{'Time': '2023-07-10T00:06:00', 'Value': 0.279},
{'Time': '2023-07-10T00:07:00', 'Value': 0},
{'Time': '2023-07-10T00:08:00', 'Value': 0.371},
{'Time': '2023-07-10T00:09:00', 'Value': 0.399},
{'Time': '2023-07-10T00:10:00', 'Value': 0.345},
...
型
所以,我在文件的开头有一个info
键,它保存了相关信息。键data
保存我想转换成3D网格的信息。对于每个坐标,都有如上所述的时间序列示例,其中我包含了3个坐标示例的示例。
1条答案
按热度按时间dm7nw8vv1#
你的企图
字符串
基本上是正确的。然后你会问:
我怎么把这个变成3D网格?
也许你指的是一个2D值数组,但这会因许多因素而变得复杂,包括你有很多重复项,数据中有不规则的网格覆盖:
型
x1c 0d1x的数据
如果你实际上想要三个索引(X/Y/Time),同样的问题仍然存在:
型
的
根据你的评论,你真正想要的是
first()
消除重复。这意味着
型
不要循环。