[英]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.