【发布时间】:2018-09-24 00:51:19
【问题描述】:
我有一个大型 Mongo DB 文档,每行一个 JSON 文档。我需要将其转换为柱状格式(Pandas DF 或 CSV),以便能够分析和得出相同的见解。我没有足够的经验来解析 Mongo DB,我不确定我是否做对了。
到目前为止我做了什么: 为了能够使用 json.loads,我在每行的末尾添加了一个逗号,并将大量的内容包装到 [] 中。
示例(1 个 JSON 的一部分)如下所示:
{ "id" : "12345id" ,
"price" : 202.4,
"order_id" : "bc2341" ,
"order_time" :
{ "date" : "2018-03-27T12:22:50.935+0000" },
"work_data" :
{ "worker_id" : "5938686",
"job" :
[ { "id" : "663442",
"approx_time" : "2018-03-27T12:13:58.33Z",
"job_type" : null },
{ "id" : "663442",
"approx_time" : "2018-03-27T12:13:58.33Z",
"job_type" : null }]}
我已将此代码写入 CSV:
report_file = open('..result.csv', 'w')
writer = csv.writer(report_file)
for row in config_file:
jobs = row.get('work_data',{}).get('job',{})
jobs_str = ''
if isinstance(jobs, list):
for job in jobs:
jobs_str += job.get('approx_time', '')
writer.writerow((row['order_time']['date'], jobs_str))
report_file.close
它有效,但我不知道如何将多个作业拆分为不同的列以获得不同的 approx_time。有人可以帮忙解决吗? 也许有更好的方法将 JSON 从 MongoDB 转换为 CSV/Pandas?
最后我需要这样的东西:
每 1 个 JSON 1 行,如果 JSON 中有多个作业,则它们必须在列中
+---------+--------+---------------+--------+---------------+
| id |id_job_1| approx_time_1 |id_job_2| approx_time_2 |
+---------+--------+---------------+--------+---------------+
| 12345id | 664442 | 27.03.2018 | 663442 | 27.03.2018 |
| 22345id | 633442 | 27.03.2018 | 622442 | 27.03.2018 |
+---------+--------+---------------+--------+---------------+
【问题讨论】:
-
不确定您在这里的确切含义:“如何将多个作业拆分为不同的列以获得不同的 approx_time”。你想达到什么目的?你需要平均'approx_time'吗?只是所有“大约时间”的列表?
标签: python json mongodb pandas