簡體   English   中英

Python csv 到嵌套 Json

[英]Python csv to Nested Json

我有一個 csv 可用,我需要為其創建一個嵌套的 Json。 Id 必須是根目錄和子根目錄中的日期,然后是所有鍵和值。 我已將 csv 轉換為 Json 但我很難以所需的格式獲得它。 我已經在我的代碼中實現了。

data = {} 
with open(csvpath, encoding='utf-8') as csvf: 
    csvReader = csv.DictReader(csvf)
    for rows in csvReader:
        key = rows['id'] 
        data[key] = rows

with open(jsonpath, 'w', encoding='utf-8') as jsonf: 
        jsonf.write(json.dumps(data, indent=4)) 

數據.csv

"id","datetime","amount","orders","quantity"
31937,27/11/2020 00:00,55.8,2,2
31937,29/11/2020 00:00,96.9,1,1
26575,27/11/2020 00:00,10.9,1,1

output.json

{
    "31937": {
        "order_datetime": "27/11/2020 00:00",
        "amount": "55.8",
        "orders": "2",
        "quantity": "2"
    },
    "31937": {
        "order_datetime": "29/11/2020 00:00",
        "amount": "10.9",
        "orders": "1",
        "quantity": "1"
    },
    "29581": {
        "order_datetime": "27/11/2020 00:00",
        "amount": "96.9",
        "orders": "1",
        "quantity": "1"
    }
  }
}

需要 output

{
  "31937": {
    "27/11/2020 00:00": {
      "amount": 55.8,
      "orders": 2,
      "quantity": 2
    },
    "29/11/2020 00:00": {
      "amount": 96.9,
      "orders": 1,
      "quantity": 1
    }
  },
  "26575": {
    "27/11/2020 00:00": {
      "amount": 10.9,
      "orders": 1,
      "quantity": 1
    }
  }
}

嘗試:

df.groupby(['id'])[['datetime','amount', 'orders', 'quantity']]\
.apply(lambda x: x.set_index('datetime').to_dict(orient='index')).to_dict()

Output:

{26575: {'27/11/2020 00:00': {'amount': 10.9, 'orders': 1, 'quantity': 1}},
 31937: {'27/11/2020 00:00': {'amount': 55.8, 'orders': 2, 'quantity': 2},
  '29/11/2020 00:00': {'amount': 96.9, 'orders': 1, 'quantity': 1}}}

格式化:

{
   26575:{
      "27/11/2020 00:00":{
         "amount":10.9,
         "orders":1,
         "quantity":1
      }
   },
   31937:{
      "27/11/2020 00:00":{
         "amount":55.8,
         "orders":2,
         "quantity":2
      },
      "29/11/2020 00:00":{
         "amount":96.9,
         "orders":1,
         "quantity":1
      }
   }
}
   

編輯2:

df.groupby(['id'])[['datetime','amount', 'orders', 'quantity']]

這將按id對 dataframe 進行分組。 這個 id 將是一個字典鍵和項目的 rest 我必須將它轉換為另一個以datetime時間為鍵的字典。

因此,分組后,我將從'datetime','amount', 'orders', 'quantity'中獲取行並將datetime時間作為鍵,並將它們的rest作為值。 這將通過使用x.set_index('datetime').to_dict(orient='index')來完成

使用orient='index'的原因是我希望得到這種形式的結果: {index -> {column -> value}}

這里我的索引是日期時間,因此它將是一個鍵,並且'amount', 'orders', 'quantity'等值的 rest 將具有以下形式:

{ "27/11/2020 00:00" -> { amount -> 55.8, orders -> 1, quantity -> 2 }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM