我有一個包含嵌套的字典串列的字典,我想把它壓平并解壓到一個csv檔案。 初始字典的鍵(稱為'讀數')是一個物理位置識別符號的串列(如111,222等)
list_of_attributes = readings.keys()
print(list_of_attributes)
結果:
dict_keys(['000111'/span>, '000967'/span>, '000073'/span> ...
對于每一個鍵,都有一個嵌套的進一步的字典串列,其中包含類似于時間序列的資料:
list(readings.values() )[0]
[{'Approval'/span>: {'ApprovalLevel'/span>: 650, 'LevelDescription': '作業'}。
'FieldVisitIdentifier': '2a328f51-aac7-494d-9f08-69716a06b179',
'Value'/span>: {'Unit'/span>: 'ft', 'Numeric': -1.53},
'DatumConvertedValues'/span>: [{'TargetDatum'/span>: 'NAVD88',
'單位': 'ft',
'Numeric': 4.196010479999999},
{'TargetDatum': 'NGVD29', '單位': 'ft', 'Numeric': 4.779999999999999},
{'TargetDatum': 'Local Assumed Datum', '單位': 'ft', 'Numeric': -0.28}] 。
'Parameter': 'GWL',
'MonitoringMethod': '鋼帶'。
'Time': '2021-05-25T18:51:00.0000000 00:00',
'評論'。'MP = SS頂部的孔 = 1.25 ft LSD'。
'發布'。True。
'ReadingType': 'Routine',
'ReferencePointUniqueId': '13208d3d0fe846c08ba7d6777b040433',
'UseLocationDatumAsReference': False}。
...
我在使用Amir Ziai的flatten_json包將嵌套的字典串列扁平化并解壓成csv時取得了一些成功,具體方法如下:
data = {(k, i): flatten(item) for k, v in readings. items() for i, item in enumerate(v)> }。
df = pd.DataFrame.from_dict(data, orient='index')
df.to_csv(r "C: est.csv", index=False)
結果 csv:
這正是我想要的,但我還需要以某種方式將初始鍵('000111', '000967', '000073')映射到每個相關記錄的一個列。 這將看起來像這樣
更新:來自端點的json樣本
Response Body
{
"FieldVisitReadings": [
{
"批準": {
"ApprovalLevel": 650,
"LevelDescription": "作業"。
},
"FieldVisitIdentifier": "2a328f51-aac7-494d-9f08-69716a06b179",
"Value": {
"單位": "ft",
"Numeric": -1.53。
},
"DatumConvertedValues": [
{
"TargetDatum": "NAVD88",
"單位": "ft",
"Numeric": 4.196010479999999
},
{
"TargetDatum": "NGVD29",
"單位": "ft",
"Numeric": 4.779999999999999
},
{
"TargetDatum": "本地假定基準",
"單位": "ft",
"Numeric": -0.28.
}
],
"Parameter": "GWL",
"MonitoringMethod": "鋼帶"。
"時間": "2021-05-25T18:51:00.0000000 00:00",
"評論"。"MP=SS頂部的孔= 1.25英尺LSD"。
"發布": true,
"ReadingType": "Routine",
"ReferencePointUniqueId": "13208d3d0fe846c08ba7d6777b040433",
"UseLocationDatumAsReference": false
},
更新2:
# Step 1: Fetch the list of locations
locationDescriptions = client.publish.get('/GetLocationist') ['LocationDescriptions']
#Pass list of identifiders to 2nd endpoint and create dictionary. 鍵是步驟1中的位置串列。
readings = dict(
(loc['Identifier']。
client.publish.get('/GetReadingsByLocation', params={
'LocationIdentifier': loc['Identifier']。
'引數'。['GWL']。
'ApplyDatumConversion': 'true'].
})['FieldVisitReadings']
) for loc in locationDescriptions)
uj5u.com熱心網友回復:
你可以使用DataFrame.drop_level() DataFrame.reset_index()來獲得你的欄目:
import pandas as pd
from flatten_json import flatten
讀數 = {
"000111": [
{
"批準": {"批準級別": 650, "LevelDescription": "作業"}。
"FieldVisitIdentifier": "2a328f51-aac7-494d-9f08-69716a06b179",
"Value": {"單位": "ft", "Numeric": -1.53},
"DatumConvertedValues": [
{
"TargetDatum": "NAVD88",
"單位": "ft",
"Numeric": 4.196010479999999,
},
{
"TargetDatum": "NGVD29",
"單位": "ft",
"Numeric": 4.779999999999999,
},
{
"TargetDatum": "本地假定資料",
"單位": "ft",
"Numeric"/span>: -0.28,
},
],
"Parameter": "GWL",
"監測方法": "鋼帶"。
"時間": "2021-05-25T18:51:00.0000000 00:00",
"評論"。"MP=SS頂部的孔= 1.25英尺LSD"。
"發布": True。
"閱讀型別"。"Routine",
"ReferencePointUniqueId": "13208d3d0fe846c08ba7d6777b040433",
"UseLocationDatumAsReference": False。
},
{
"批準": {"批準級別": 1200, "LevelDescription": "作業"}。
"FieldVisitIdentifier": "xxx"。
"Value": {"單位": "ft", "Numeric": -1.53},
"DatumConvertedValues": [
{
"TargetDatum": "NAVD88",
"單位": "ft",
"Numeric": 4.196010479999999,
},
{
"TargetDatum": "NGVD29",
"單位": "ft",
"Numeric": 4.779999999999999,
},
{
"TargetDatum": "本地假定資料",
"單位": "ft",
"Numeric"/span>: -0.28,
},
],
"Parameter": "GWL",
"監測方法": "鋼帶"。
"時間": "2021-05-25T18:51:00.0000000 00:00",
"評論"。"MP=SS頂部的孔= 1.25英尺LSD"。
"發布": True。
"閱讀型別"。"Routine",
"ReferencePointUniqueId": "13208d3d0fe846c08ba7d6777b040433",
"UseLocationDatumAsReference": False。
},
]
}
資料 = {
(k, i): flatten(item)
for k, v in readings.items()
for i, item in enumerate(v)
}
df = pd.DataFrame.from_dict(data, orient="index"/span>)
df = df.droplevel(level=1).reset_index().rename(columns={"index"/span>: "Keys"})
print(df)
df.to_csv("data.csv", index=False)
印刷品:
Keys Approval_ApprovalLevel Approval_LevelDescription FieldVisitIdentifier Value_Unit Value_Numeric DatumConvertedValues_0_TargetDatum DatumConvertedValues_0_Unit DatumConvertedValues_0_Numeric DatumConvertedValues_1_TargetDatum DatumConvertedValues_1_Unit DatumConvertedValues_1_Numeric DatumConvertedValues_2_TargetDatum DatumConvertedValues_2_Unit DatumConvertedValues_2_Numeric Parameter MonitoringMethod Time Comment Publish ReadingType ReferencePointUniqueId UseLocationDatumAsReference
0 000111 650 作業 2a328f51-aac7-494d-9f08-69716a06b179 ft -1.53 NAVD88 ft 4.19601 NGVD29 ft 4.78 Local Assumed Datum ft -0.28 GWL Steel Tape 2021-05-25T18:51:00.0000000 00:00 MP = SS頂部的孔 = 1.25 ft LSD True Routine 13208d3d0fe846c08ba7d6777b040433 False
1 000111 1200作業xxx英尺-1.53 NAVD88英尺4.19601 NGVD29英尺4.78 當地假定基準英尺-0.28 GWL鋼帶 2021-05-25T18:51:00.0000000 00:00 MP=SS頂部的孔= 1.25英尺LSD真 常規13208d3d0fe846c08ba7d6777b040433假
并保存data.csv:
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332423.html
標籤:



