【发布时间】:2017-06-10 03:48:33
【问题描述】:
我正在尝试将平面 CSV 转换为嵌套的 JSON 格式。这是我的数据:
# data.csv
company_id,company_name,income_type,income_amt
1,"Foobar Inc","royalties",5000000
2,"ACME Corp","sales",3000000
2,"ACME Corp","rent",1000000
并且需要转换成如下的JSON结构:
{"data": [{
"company_id": 1,
"name": "Foobar Inc",
"income": ["royalties": 5000000]
},
{
"company_id": 2,
"company_name": "ACME Corp",
"income": [
"sales": 3000000,
"rent": 1000000
]
}]
}
但我当前的代码(基于 this 并使用 Python 和 pandas 库):
# script.py
import json
import pandas as pd
df = pd.read_csv('data.csv')
def get_nested_rec(key, grp):
rec = {}
rec['company_id'] = key[0]
rec['company_name'] = key[1]
for field in ['income_type']:
income_types = list(grp[field].unique())
rec['income'] = income_types
return rec
records = []
for key, grp in df.groupby(['company_id','company_name','income_type','income_amt']):
rec = get_nested_rec(key, grp)
records.append(rec)
records = dict(data = records)
print(json.dumps(records, indent=4))
输出这种格式:
{"data": [
{
"company_id": 1,
"company_name": "Foobar Inc",
"income": [
"royalties"
]
},
{
"company_id": 2,
"company_name": "ACME Corp",
"income": [
"sales"
]
},
{
"company_id": 2,
"company_name": "ACME Corp",
"income": [
"rent"
]
}
]}
在弄清楚如何将具有相同 company_id 的行组合成一个对象并添加 income_amt 值时遇到了困难。
【问题讨论】: