使用 to_json 将 Python Pandas DataFrame 转换为 JSON

2023-10-13

The to_json函数在转换时特别有用PandasDataFrame 到 JSON 文件。它允许您转换并返回可编写为 JSON 文件的可序列化对象。

该函数具有多个参数,可提供 JSON(JavaScript 对象表示法)输出的自定义。其中之一是orient参数,它控制生成的 JSON 的格式。

 

 

to_json 的语法和参数

这是语法to_json功能:


DataFrame.to_json(path_or_buf=None, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit='ms', default_handler=None, lines=False, compression='infer', index=True)
  

让我们详细看看每个参数:

  1. 路径或缓冲区– 字符串路径、路径对象或类似文件的对象。如果未指定,结果将以字符串形式返回。
  2. orient– 生成的 JSON 的格式。选项包括“拆分”、“记录”、“索引”、“列”、“值”和“表”。如果方向不正确,则会抛出 ValueError,因为其他方向不是列表式的。
  3. 日期格式– 控制日期时间对象的格式。默认为‘iso’,但你也可以使用‘epoch’=纪元毫秒
    ‘s’:第二个
    ‘ms’:毫秒
    ‘我们’:微秒
    “ns”代表纳秒。
  4. 双精度– 编码浮点值时要使用的小数位数。
  5. 强制 ASCII– 强制编码字符串为 ASCII。
  6. 日期单位– 编码的时间单位,控制时间戳和 ISO8601 精度。 “s”、“ms”、“us”或“ns”之一。
  7. 默认处理程序– 如果无法将对象转换为合适的 JSON 格式,则调用处理程序。 None 将被转换为 null,datetime 对象将被转换为 Unix 时间戳。
  8. lines– 如果设置为True,JSON 输出将采用行分隔的 JSON 格式。
  9. 压缩– 要使用的压缩类型。如果未指定,则从文件名推断压缩。
  10. index– 是否在 JSON 输出中包含 DataFrame 的索引。

在以下部分中,我们将查看一些使用示例to_json这些参数有不同的设置。

 

将 Pandas DataFrame 转换为 JSON 文件

现在,让我们看一个使用示例to_json将 DataFrame 转换为 JSON 文件。
首先,我们需要创建一个数据框。在本教程中,我们将使用一些示例数据。


import pandas as pd
data = {'Name': ['John', 'Anna', 'Peter'],
        'Age': [28, 24, 22],
        'City': ['New York', 'London', 'Bangkok']}
df = pd.DataFrame(data)
print(df)
  

该代码的输出将是:


   Name  Age      City
0  John   28  New York
1  Anna   24    London
2  Peter  22   Bangkok
  

我们有一个数据框df包含三列——姓名、年龄和城市。现在让我们使用以下命令将此 DataFrame 转换为 JSON 文件to_json功能。


df.to_json('data.json')
  

这会将 DataFrame 写入名为“data.json”的 JSON 文件。生成的 JSON 将如下所示:


{
    "Name": {
        "0": "John",
        "1": "Anna",
        "2": "Peter"
    },
    "Age": {
        "0": 28,
        "1": 24,
        "2": 22
    },
    "City": {
        "0": "New York",
        "1": "London",
        "2": "Bangkok"
    }
}
  

在此输出中,DataFrame 中的每个列名称都成为 JSON 文件中的键。每个键下的值形成另一个字典,其中键是 DataFrame 中的索引,值是相应的单元格值。

 

导出到压缩 JSON

The compression参数允许您直接将 DataFrame 导出到压缩的 JSON 文件。
操作方法如下:


df.to_json('compressed_data.json.gz', compression='gzip')
  

上面的代码行将 DataFrame 写入名为“compressed_data.json.gz”的压缩 JSON 文件。请注意,当文件名以“.gz”结尾时,Pandas 推断数据应该使用 gzip 进行压缩,即使compression参数未明确设置为“gzip”。
The compression参数支持多种类型的压缩,包括“gzip”、“bz2”、“zip”、“xz”。当您处理可以更有效地以压缩格式存储的大型数据集时,此参数非常有用。

 

探索不同的方向选项

The orient中的参数to_json函数允许您自定义生成的 JSON 的格式。让我们探索它提供的不同选项。
可能的选项orient是“拆分”、“记录”、“索引”、“列”、“值”和“表”。对于“split”、“records”和“table”选项,使用 DataFrame 索引。

请记住在读取 JSON 文件时使用相同的方向读取json.

 

分裂方向

“分裂”方向是一种特殊的方向。在这种格式中,数据被分为列标题、行索引和数据的不同部分。如果您稍后需要重建 DataFrame,这会特别有用,因为它清楚地分离了 DataFrame 的关键组件。
让我们仔细看看“分裂”方向是如何工作的。


print(df.to_json(orient='split'))
  

Output:


{"columns":["Name","Age","City"],"index":[0,1,2],"data":[["John",28,"New York"],["Anna",24,"London"],["Peter",22,"Bangkok"]]}
  

在“split”格式中,JSON 输出由三个主要部分组成:

  1. “columns”:这是 DataFrame 的列名称的列表。
  2. “index”:这是 DataFrame 行索引的列表。
  3. “data”:这是一个列表列表,其中每个子列表代表 DataFrame 中的一行数据。

此结构确保保留重建原始 DataFrame 的所有必要信息。

由于此功能,在存储 DataFrame 数据以供以后使用时经常使用“拆分”方向。

 

记录方向

在这种情况下,DataFrame 的每一行都作为列表中单独的 JSON 对象输出。
以下是如何使用“记录”方向:


print(df.to_json(orient='records'))
  

Output:


[{"Name":"John","Age":28,"City":"New York"},{"Name":"Anna","Age":24,"City":"London"},{"Name":"Peter","Age":22,"City":"Bangkok"}]
  

在“记录”格式中,输出 JSON 是对象列表。每个对象代表 DataFrame 中的一行,其中每个键值对对应于该行中的一列及其值。
“记录”格式的优点之一是其可读性。

 

索引方向

在这个方向上,DataFrame 的每一行都呈现为一个 JSON 对象,DataFrame 的索引用作外部 JSON 对象中的键。
这是“索引”方向的示例:


print(df.to_json(orient='index'))
  

Output:


{"0":{"Name":"John","Age":28,"City":"New York"},"1":{"Name":"Anna","Age":24,"City":"London"},"2":{"Name":"Peter","Age":22,"City":"Bangkok"}}
  

在“index”格式中,每个外键代表 DataFrame 中的一个索引,其对应的值是一个 JSON 对象,其中包含表示该行中的数据的列值对。
当 DataFrame 中的索引携带需要在 JSON 结构中维护的重要信息时,此格式非常有用。

例如,如果索引表示记录的唯一标识符,则“索引”方向会保留该连接。

 

列方向

在这个方向上,JSON 输出按列组织,DataFrame 的每一列都成为 JSON 对象中的键值对。
让我们看看“列”方向的样子:


print(df.to_json(orient='columns'))
  

Output:


{"Name":{"0":"John","1":"Anna","2":"Peter"},"Age":{"0":28,"1":24,"2":22},"City":{"0":"New York","1":"London","2":"Bangkok"}}
  

在“列”格式中,JSON 对象中的每个键代表 DataFrame 中的一列,值是另一个 JSON 对象。该内部对象的键是 DataFrame 的索引,值是相应的单元格值。
当您想要逐列处理数据时,“列”方向尤其有用。

 

价值观导向

在这个方向上,输出是一个包含 DataFrame 值的 JSON 数组。

这是一个例子:


print(df.to_json(orient='columns'))  

Output:


[["John",28,"New York"],["Anna",24,"London"],["Peter",22,"Bangkok"]]
  

正如您所看到的,输出是一个 JSON 数组数组,其中每个子数组代表 DataFrame 的一行。

 

桌子方向

“表格”方向是一个独特的选项,它不仅包含数据,还包含有关 DataFrame 的一些元信息。

它包括有关所用 Pandas 的字段名称、类型和版本的详细信息。
以下是如何使用“桌子”方向:


print(df.to_json(orient='table'))
  

Output:


{"schema": {"fields":[{"name":"index","type":"integer"},{"name":"Name","type":"string"},{"name":"Age","type":"integer"},{"name":"City","type":"string"}],"primaryKey":["index"],"pandas_version":"0.20.0"}, "data": [{"index":0,"Name":"John","Age":28,"City":"New York"},{"index":1,"Name":"Anna","Age":24,"City":"London"},{"index":2,"Name":"Peter","Age":22,"City":"Bangkok"}]}
  

在“table”格式中,输出 JSON 包含两个主要部分:

当您想要跟踪 DataFrame 中的数据类型时,“表”格式非常有用,特别是在不同系统或用户之间共享数据时,此元信息可以帮助保持一致性和理解。

 

浮点数精度

默认情况下,Pandas 对浮点数使用最多 15 位小数的精度。
您可以使用以下命令控制浮点数的精度double_precision的参数to_json功能。
让我们创建一个带有浮点数的 DataFrame 并将其转换为具有不同精度级别的 JSON:


import pandas as pd
data = {'A': [1.123456789], 'B': [2.123456789], 'C': [3.123456789]}
df = pd.DataFrame(data)
print(df.to_json(orient='split', double_precision=2))
  

Output:


{"columns":["A","B","C"],"index":[0],"data":[[1.12,2.12,3.12]]}
  

在上面的例子中,double_precision参数设置为 2。这会将输出 JSON 中的浮点数精度限制为小数点后 2 位。

当您想要减小文件大小或使输出更具可读性时,控制精度非常有用。

 

处理日期格式

您可以使用date_format参数输入to_json函数将日期时间数据格式化为两种不同的格式:“epoch”和“iso”。

让我们创建一个包含日期时间数据的 DataFrame 并使用这两个选项将其转换为 JSON:


import pandas as pd
from datetime import datetime
data = {'Date': [datetime(2022, 1, 1), datetime(2022, 2, 1), datetime(2022, 3, 1)]}
df = pd.DataFrame(data)

# Using the 'epoch' format
print(df.to_json(date_format='epoch'))

# Using the 'iso' format
print(df.to_json(date_format='iso'))
  

Output:


{"Date":{"0":1640995200000,"1":1643673600000,"2":1645910400000}}
{"Date":{"0":"2022-01-01T00:00:00.000Z","1":"2022-02-01T00:00:00.000Z","2":"2022-03-01T00:00:00.000Z"}}
  

正如您所看到的,使用“epoch”时,日期时间对象将转换为 UNIX 时间戳。

但是,使用“iso”,日期时间对象将转换为更具可读性的 ISO 格式。

 

进一步阅读

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_json.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 to_json 将 Python Pandas DataFrame 转换为 JSON 的相关文章

  • 类型错误:initial_value 必须是 unicode 或 None,而不是 str,

    我正在使用 SOAPpy 来提供 SOAP wsdl 服务 我正在关注这个toturail http www diveintopython net soap web services introspection html 我的代码如下 fr
  • 在QT中以不同的时间间隔更新GUI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道如何在QT中以不同的时间间隔更新GUI 最好的是我可以控制时间间隔 我知道 QTimer 可以在同一时间间隔更新 GUI 但我
  • Python 中的字符串、整数和运算符

    如何在运算中使用算术运算符 由用户作为字符串输入 我可以打印操作本身 但我想打印解决方案 这是我的笨拙尝试 Initialise variables x 2 y 3 Prompt the user for an arithmetic ope
  • 如何在屏幕上锚定 Tkinter 窗口(不可移动窗口)

    我正在尝试在特定位置打开 tkinter 如果它是不可移动的 那就更好了 我搜索文档和其他内容 但没有找到任何相关内容 最好的方法是将顶部或底部固定在一个位置 x y 如果需要 我可以调整窗口大小 def my functions prin
  • 在Python中的自定义类中实现“with object() as f”的使用

    我必须在 python 中打开一个类似文件的对象 它是通过 dev 的串行连接 然后关闭它 在我的班级的几种方法中 这已经完成了好几次 我的做法是在构造函数中打开文件 然后在析构函数中关闭它 不过 我遇到了奇怪的错误 我认为这与垃圾收集器有
  • Python:从区间到值的映射

    我正在重构一个函数 给定一系列隐式定义间隔的端点 检查间隔中是否包含数字 然后返回相应的值 不以任何可计算的方式相关 现在处理这项工作的代码是 if p lt 100 return 0 elif p gt 100 and p lt 300
  • Python:将字典转换为字节

    我正在尝试将字典转换为字节 但在将其转换为正确的格式时遇到问题 首先 我尝试使用自定义架构映射字典 模式定义如下 class User def init self name None code None self name name sel
  • Tensorflow:使用 Adam 优化器

    我正在张量流中试验一些简单的模型 包括一个看起来与第一个非常相似的模型面向 ML 初学者的 MNIST 示例 http www tensorflow org tutorials mnist beginners index md 但维数稍大一
  • 匹配所有 utf-8/unicode 小写字母形式的正确正则表达式是什么

    我想匹配all拉丁语块中的小写字母形式 简单的 a z 仅匹配 U 0061 和 U 007A 之间的字符 而不匹配所有其他小写形式 我想匹配所有小写字母 最重要的是 EFIGS 语言中使用的拉丁语块中的所有带重音的小写字母 a z 是一个
  • 将 pdf 图像转换为 jpg 图像的最快方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试将多个 pdf 10k 转换为 jpg 图像并从中提取文本 我目前正在使用pdf2imagepython 库 但它相当慢 有没有比这更
  • “scipy.misc”没有属性“imsave”

    当我尝试使用 Scipy misc imsave path image 保存图像时 我收到此错误 模块 scipy misc 没有属性 我正在使用 Ubuntu 17 10 并且安装了 Pillow 和 scipy 你能帮我吗 scipy
  • 请求库在 HTTPS 代理 CONNECT 上强制使用 HTTP/1.1

    我遇到了 HTTP 代理服务器行为异常的问题 不幸的是 我无法控制代理服务器 它是 IBM 的 企业 产品 代理服务器是用于软件测试的服务虚拟化解决方案的一部分 根本问题 我认为 是代理服务器发回 HTTP 1 0 响应 我可以从 SOAP
  • 在包含一些通配符的大型列表中进行成员资格测试

    当列表包含特殊类别时 如何测试某个短语是否在大型 650k 短语列表中 例如 我想测试这个短语是否 he had the nerve 在列表中 确实如此 但是在 he had DETERMINER nerve where DETERMINE
  • 使用 CustomCallback() 类在训练时实现冻结层

    我正在尝试在 TensorFlow 中训练自定义 CNN 模型 我想以某种方式在训练仍在运行时冻结特定时期模型的某些层 我已经实现了冻结层 但我必须在某些时期训练模型 然后在我想要冻结的特定层中将可训练属性更改为 False 然后编译模型
  • Python opencv排序轮廓[重复]

    这个问题在这里已经有答案了 我正在关注这个问题 如何从左到右 从上到下对轮廓进行排序 https stackoverflow com questions 38654302 how can i sort contours from left
  • 添加类方法后如何更新类的实例?

    我发现自己陷入了困境 我开发了一个类 然后创建了该类的一个实例 这些类通常会执行数据和统计操作 这些操作需要很长时间 有时需要 20 分钟 我将继续开发我的类 并向其中添加其他方法 现在 如何使用新方法更新以前的类实例而不重新初始化该类的旧
  • 如何使用 Python 将表格从 CSV 写入 PDF [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个CSV文件包含下表 users passwords company Admin test psw test cmp test
  • 如何使用 numpy 数组加速分形生成?

    这是我为使用牛顿方法制作分形而编写的一个小脚本 import numpy as np import matplotlib pyplot as plt f np poly1d 1 0 0 1 x 3 1 fp np polyder f def
  • 如何从具有另一个环境的另一个脚本运行一个具有其环境的Python脚本?

    我有两个脚本 script1 py and script2 py script1 有它自己的环境 比如 python 2 而 script2 有它自己的环境 比如 python 3 如何使脚本 1 调用脚本 2 及其相应的环境 Thanks
  • 加载视频数据集(Keras)

    我正在尝试实现 LRCN C LSTM RNN 来对视频中的情绪进行分类 我的数据集结构分为两个文件夹 train set 和 valid set 当你打开其中任何一个时 你可以找到3个文件夹 积极 消极 和 惊喜 最后 这 3 个文件夹中

随机推荐

  • Python 基础练习:文件系统操作(概述)

    In Python 基础知识 文件系统操作 您学习了如何使用 Python 处理文件和文件夹 作为一名程序员 您将使用pathlib和shutil要完成的模块文件系统操作不依赖你的图形用户界面 GUI 虽然您已经进行了大量文件系统操作的实践
  • 使用 Python 和 ggplot 绘制数据图表

    在本课程中 您将学习如何使用ggplot在Python中使用创建数据可视化图形语法 图形语法是一种高级工具 可让您以高效且一致的方式创建数据图 它抽象了最底层的细节 让您专注于为数据创建有意义且美观的可视化效果 有几个 Python 包提供
  • MicroPython 入门(概述)

    您对物联网 家庭自动化和互联设备感兴趣吗 你有没有想过建造一把爆能枪 一把激光剑 甚至你自己的机器人会是什么样子 如果是这样 那么您很幸运 微Python可以帮助您完成所有这些事情以及更多 在本课程中 您将了解 这历史微Python的 这差
  • Jupyter 终端及更多

    Jupyter Notebooks 不仅可以让您启动笔记本 在本课程中 您将学习如何启动新终端以及如何在浏览器中创建文件夹或文件
  • 2021 年 8 月 11 日

    主持人大卫 阿莫斯回答会员的问题 本周 Real Python 社区经理 Andres Pineda 也加入了 David 的行列 在这次会议上 我们讨论了 Python 新闻和更新 如何开始使用 Python 进行日志记录 如何学习编写更
  • 适合 Python 程序员的 C

    目录 The C Preprocessor 包括 定义 undef if pragma 错误 Basic C Syntax for Python Programmers 一般的 if 语句 switch 语句 循环 功能 指针 弦乐 结构体
  • 关于约翰·斯特茨

    关于约翰 斯特茨 John 是一位狂热的 Python 爱好者 也是 Real Python 教程团队的成员 约翰的教程 Python 中的模字符串格式化 Python 中的递归 简介 Python 中的函数式编程 何时以及如何使用它 Py
  • pandas 排序方法入门

    有关这些视频中使用的 REPL 的更多信息 您可以查看蟒蛇以及真正的 Python 教程探索 bpython 具有类似 IDE 功能的 Python REPL
  • 漂亮的印花

    此外print Python 包括一个漂亮的印刷品方法 此方法对于以更易于阅读的格式输出有关对象的调试信息特别有用 gt gt gt gt gt gt from pprint import pprint gt gt gt data squa
  • Python 新闻:2021 年 12 月以来的新增内容

    目录 Python 指导委员会选举 Python 新版本 Python 3 6 生命周期结束 代码的出现 Python 的下一步是什么 In 2021 年 12 月 第四个Python指导委员会像往常一样 由新成员和回归成员组成 Pytho
  • 第 12 集:Python 中的网页抓取:工具、技术和合法性

    第 12 集 Python 中的网页抓取 工具 技术和合法性 真正的 Python 播客 2020年6月5日50公尺 RSS Apple Podcasts Google Podcasts Spotify More 播客瘾君子 灰蒙蒙 袖珍铸
  • 列表:有序和任意

    您已经了解了如何创建列表 在本课程中 您将了解到列表是有序的并且可以包含任意对象的集合 定义列表时使用的顺序在列表的生命周期内保持不变 包含相同元素但顺序不同的列表是不同的 gt gt gt gt gt gt a spam egg baco
  • 在“for”循环中使用 .append() 进行附加处理

    有关本课程所涵盖概念的更多信息 您可以查看 Python enumerate 简化需要计数器的循环 真正的Python文章 Python for 循环 确定迭代 真正的Python文章
  • 设计和指导:Python 中的 OOP(概述)

    编写优秀的面向对象代码不仅仅是如何编写 句法 知道何时和何时不使用它 以及指导原则 在后面面向对象设计将帮助您编写更好的代码 在本课程中 您将了解 中的面向对象方法Python 与其他语言 您的情况不应该使用Python 中的类 继承的替代
  • 使用 Sed 命令在 Linux 中追加文本

    Sed提供根据特定模式或条件将文本附加到文件中的行的能力 您可以使用a 命令输入sed在模式匹配后添加新行 让我们深入研究现实世界的示例 以了解如何有效地利用此功能 目录 hide 1 在匹配的模式后添加一行 2 在匹配的模式后追加多行 3
  • Linux Web 服务器 (Apache) 的安装、配置和故障排除

    在本教程中 我们将具体讨论 Linux Web 服务器或 Apache Web 服务器 以及如何安装和配置它以向其他人提供您的内容 Web 服务器是一个通过 HTTP 协议处理请求的系统 您向服务器请求一个文件 它会响应所请求的文件 这可能
  • 使用 Curl 命令的 RESTful API 交互

    主要用途之一curl与 RESTful API 进行交互 RESTful API 是许多现代 Web 应用程序和服务的支柱 在本教程中 您将学习如何使用 RESTful API 进行交互卷曲命令 获取数据 发布信息以及解析各种响应 目录 h
  • NumPy 数组重塑指南

    The NumPyPython 中的库提供了强大的功能来重塑数组的维度 这就是我们将在本教程中深入探讨的内容 在整个教程中 我们将介绍 NumPy 数组重塑的含义及其重要性 然后再深入研究如何重塑不同维度的数组的细节 在本教程结束时 您将熟
  • Python 分析(检测 CPU 和内存瓶颈)

    您是否一直在代码中处理包含大量数据的数据集 并且一旦执行代码 您就会发现代码需要很长时间才能产生最终输出 嗯 这可能会令人沮丧 您可能使用了正确的语法 并且逻辑也是正确的 然而 该代码会消耗大量 RAM 并且执行时间过长 这时您应该考虑优化
  • 使用 to_json 将 Python Pandas DataFrame 转换为 JSON

    The to json函数在转换时特别有用PandasDataFrame 到 JSON 文件 它允许您转换并返回可编写为 JSON 文件的可序列化对象 该函数具有多个参数 可提供 JSON JavaScript 对象表示法 输出的自定义 其