【发布时间】:2018-12-20 15:09:32
【问题描述】:
我对 Python 编程有点陌生。我有一个小要求,我需要以 JSON 格式列出给定两周内的所有客户及其金额。
目前,我有一个这样的数据框:
FortNight Amount Customer Parameter
Apr-2FN-2018 339632.00 10992 CustomerSales
Apr-2FN-2018 27282.00 10994 CustomerSales
Apr-2FN-2018 26353.00 10995 CustomerSales
Apr-2FN-2018 24797.00 11000 CustomerSales
Apr-2FN-2018 21093.00 10990 CustomerSales
预期的 JSON:
"CustomerSales" : [
{"FortNight" : "Apr-2FN-2018",
"Details" :[
{"Customer": "10992","Amount" : 339632.00},
{"Customer": "10994","Amount" : 27282.00},
{"Customer": "10995","Amount" : 26353.00},
{"Customer": "11000","Amount" : 24797.00},
{"Customer": "10990","Amount" : 21093.00}
]
}
]
我试过了:
dict(df.set_index('Parameter').groupby(level=0).apply(lambda x : ast.literal_eval(x.to_json(orient = 'records', date_format = "iso"))))
它检索到这个:
[{'CustomerSales':
[{'Customer': '10992', 'Amount': 339632.00, 'FortNight': 'Apr-2FN-2018'}, {'Customer': '10994', 'Amount': 27282.00, 'FortNight': 'Apr-2FN-2018'},{'Customer': '10995', 'Amount': 26353.00, 'FortNight': 'Apr-2FN-2018'},
{'Customer': '11000', 'Amount': 24797.00, 'FortNight': 'Apr-2FN-2018'},
{'Customer': '10990', 'Amount': 21093.00, 'FortNight': 'Apr-2FN-2018'}]}]
我也尝试了其他方法,但徒劳无功。欢迎任何帮助。 提前致谢!
【问题讨论】:
-
从不使用
ast.literal_eval()解析 JSON。它速度较慢,并且在您具有布尔值或空值时会产生错误。此外,转换为 JSON 然后解析回字典意味着您真的只想生成一个字典,以更直接的路径开头。 -
按该列分组时,您也不需要将索引设置为
Parameter。只需使用df.groupby('Parameter')。
标签: python json pandas dictionary