将 Pandas 数据框写入 JSON 文件

3
我可以为您提供翻译。以下是需要翻译的内容:

我有一个小数据框,想将其转换为JSON文件。我希望JSON文件格式良好(具有缩进等)。此外,我希望数据帧中的一列成为JSON数据的键。这是一个例子:

输入数据框:

    start_date  Nums  ID     tag
51 2016-03-13 00:00:00       3110            2  787623
55 2016-03-17 00:00:00     676754            1  787623

期望的JSON输出格式:[注:索引51和55已消失,标签值78723已成为“键”]。以下是期望的内容。
{
          "787623": [{
              "start_date": "2016-03-13", 
              "Nums": "3110",
              "ID": "2"
           }, {
              "start_date": "2016-03-17", 
              "Nums": "676754",
              "ID": "1"
           }]
}

目前,我正在执行一个简单的 df.to_json(jsonFile, date_format = 'iso', orient = 'records') 命令,它会生成一个更紧凑的 JSON 文件,如下所示:

[{"start_date":"2016-03-13T00:00:00.000Z","Nums":3110,"ID":2,"tag":787623},{"start_date":"2016-03-17T00:00:00.000Z","Nums":676754,"ID":1,"tag":787623}]

但是,我喜欢漂亮的格式风格。

非常感谢任何帮助。


我进行了jsonlint验证:{ "787623": [{ "start_date": "2016-03-13", "Nums": "3110", "ID": "2" }, { "start_date": "2016-03-17", "Nums": "676754", "ID": "1" }] } - user1717931
2个回答

4
DataFrame.to_dict() 方法有很多选项可以控制生成的字典格式。然后,您可以使用 json 模块中的 indent 选项来创建格式良好的字符串。
示例:
d={}
for tag,group in df.set_index('tag').groupby(level='tag'):
    d[str(tag)]=group.to_dict(orient='records')
print(json.dumps(d,indent=1))

提供
{
 "787623": [
  {
   "ID": 2,
   "Nums": 3110,
   "start_date": "2016-03-13"
  },
  {
   "ID": 1,
   "Nums": 676754,
   "start_date": "2016-03-17"
  }
 ]
}

如果标签字段中没有重复条目,那么一行代码就可以解决。

我将输入编辑为日期和hh:mm:ss格式。这样做时,我遇到了一个错误:我收到了一个错误:TypeError: Timestamp('2016-03-13 00:00:00')不可JSON序列化。 - user1717931
看到一个关于这个的SO帖子:def date_handler(obj): if hasattr(obj, 'isoformat'): return obj.isoformat() else: raise TypeError print json.dumps(data, default=date_handler) - user1717931

1
这应该可以做到:

df.groupby('tag').apply(lambda df: df.to_dict(orient='records')).to_json(date_format='iso')

{"787623":[{"ID":2,"tag":787623,"start_date":"2016-03-13","Nums":3110},{"ID":1,"tag":787623,"start_date":"2016-03-17","Nums":676754}]}

嗯,差不多了。除了“tag”值不应该出现……因为那个值已经是键了。 - user1717931

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接