首页 前端知识 【Pandas】深入解析`pd.read_json()`函数

【Pandas】深入解析`pd.read_json()`函数

2024-07-20 17:07:16 前端知识 前端哥 667 438 我要收藏

【Pandas】深入解析pd.read_json()函数

在这里插入图片描述

🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇
🎓 博主简介:
我是云天徽上,一名对技术充满热情的探索者。多年的Python编程和机器学习实践,使我深入理解了这些技术的核心原理,并能够在实际项目中灵活应用。尤其是在NLP领域,我积累了丰富的经验,能够处理各种复杂的自然语言任务。
🔧 技术专长:
我熟练掌握Python编程语言,并深入研究了机器学习和NLP的相关算法和模型。无论是文本分类、情感分析,还是实体识别、机器翻译,我都能够熟练运用相关技术,解决实际问题。此外,我还对深度学习框架如TensorFlow和PyTorch有一定的了解和应用经验。
📝 博客风采:
在博客中,我分享了自己在Python编程、机器学习和NLP领域的实践经验和心得体会。我坚信知识的力量,希望通过我的分享,能够帮助更多的人掌握这些技术,并在实际项目中发挥作用。机器学习博客专栏几乎都上过热榜第一:https://blog.csdn.net/qq_38614074/article/details/137827304,欢迎大家订阅
💡 服务项目:
除了博客分享,我还提供NLP相关的技术咨询、项目开发和个性化解决方案等服务。如果您在机器学习、NLP项目中遇到难题,或者对某个算法和模型有疑问,欢迎随时联系我,我会尽我所能为您提供帮助,个人微信(xf982831907),添加说明来意。

在数据处理和分析中,JSON(JavaScript Object Notation)格式的数据是非常常见的。Pandas库提供了一个便捷的函数pd.read_json(),允许我们直接将JSON格式的数据读取为DataFrame对象,极大地简化了数据处理流程。本文将深入解析pd.read_json()函数的各个参数,并通过具体的使用案例来展示其应用。

一、pd.read_json()函数概述

pd.read_json()函数是Pandas库中用于读取JSON格式数据并转换为DataFrame对象的函数。它支持多种JSON数据格式,包括JSON字符串、JSON文件、URL指向的JSON数据等。通过调整函数的参数,我们可以控制数据的读取方式和处理细节。

1.1 函数签名

pandas.read_json(path_or_buf=None, orient=None, typ='frame', dtype=None, convert_axes=None, convert_dates=True, keep_default_dates=True, numpy=False, precise_float=False, date_unit=None, encoding=None, lines=False, chunksize=None, compression='infer', nrows=None, **kwds)

1.2 主要参数详解

  • path_or_buf:字符串类型,指定要读取的JSON文件路径或JSON字符串。
  • orient:指定JSON数据中的键(keys)如何转换为DataFrame的列和行。可选值包括:‘split’、‘records’、‘index’、‘columns’、'values’等。
  • typ:默认为’frame’,指定返回的数据类型,通常我们不需要修改这个参数。
  • dtype:字典类型,用于指定DataFrame中列的数据类型。
  • convert_axes:布尔类型,默认为True,表示将轴(行索引和列名)转换为DataFrame中的数据类型。
  • convert_dates:布尔类型或列表类型,默认为True,表示是否将JSON中的字符串转换为日期类型。如果为列表,则只转换列表中指定的列。
  • keep_default_dates:布尔类型,默认为True,表示是否将默认的日期字符串(如ISO 8601日期)转换为日期类型。
  • numpy:布尔类型,默认为False,表示是否将JSON中的数字转换为NumPy的整数或浮点数类型。
  • precise_float:布尔类型,默认为False,表示是否将JSON中的浮点数读取为高精度的NumPy浮点数类型。
  • date_unit:字符串类型,用于指定日期时间的单位,如’s’(秒)、‘ms’(毫秒)、‘us’(微秒)等。
  • encoding:字符串类型,用于指定读取文件时使用的字符编码。
  • lines:布尔类型,默认为False,表示是否按行读取JSON数据。当数据是一个包含多个JSON对象的文本文件时,这个参数非常有用。
  • chunksize:整数类型,用于指定按行读取时每次读取的行数,常用于处理大数据集。
  • compression:字符串类型,用于指定文件的压缩方式,如’gzip’、'bz2’等。

二、使用案例

2.1 读取JSON文件

假设我们有一个名为data.json的JSON文件,内容如下:

{
  "name": ["Alice", "Bob", "Charlie"],
  "age": [25, 30, 35],
  "city": ["New York", "San Francisco", "Los Angeles"]
}

我们可以使用pd.read_json()函数将其读取为DataFrame:

import pandas as pd

df = pd.read_json('data.json')
print(df)

输出:

     name  age           city
0   Alice   25       New York
1     Bob   30  San Francisco
2  Charlie   35    Los Angeles

注意,默认情况下Pandas会将JSON对象中的键(keys)作为DataFrame的列名,值(values)作为数据。

2.2 读取JSON字符串

我们也可以直接将JSON字符串读取为DataFrame:

json_str = '''
[
  {"name": "Alice", "age": 25, "city": "New York"},
  {"name": "Bob", "age": 30, "city": "San Francisco"},
  {"name": "Charlie", "age": 35, "city": "Los Angeles"}
]
'''

df = pd.read_json(json_str)
print(df)

输出:

       name  age           city
0     Alice   25       New York
1       Bob   30  San Francisco
2  Charlie   35    Los Angeles

在这个例子中,我们提供了一个包含多个JSON对象的JSON字符串,并使用pd.read_json()函数将其解析为DataFrame。由于数据是以列表的形式组织的,Pandas默认将其解析为多个行。

2.3 读取具有复杂结构的JSON数据

当JSON数据具有更复杂的结构时,我们可以使用orient参数来控制数据的解析方式。例如,如果JSON数据以记录(records)的形式组织,我们可以这样读取:

[
  {"name": "Alice", "info": {"age": 25, "city": "New York"}},
  {"name": "Bob", "info": {"age": 30, "city": "San Francisco"}}
]

我们可以使用orient='records'参数来读取这种数据:

json_str_records = '''
[
  {"name": "Alice", "info": {"age": 25, "city": "New York"}},
  {"name": "Bob", "info": {"age": 30, "city": "San Francisco"}}
]
'''

df = pd.read_json(json_str_records, orient='records')
print(df)

但这样读取后,info列将是一个字典对象。为了将其展平为单独的列,我们可以使用json_normalize函数:

from pandas.io.json import json_normalize

normalized_df = json_normalize(json.loads(json_str_records), 'info', ['name'])
print(normalized_df)

输出:

      age           city     name
0      25       New York    Alice
1      30  San Francisco      Bob

2.4 读取包含日期格式的JSON数据

如果JSON数据中包含日期格式的字符串,我们可以使用convert_dates参数来自动将它们转换为Pandas的日期类型:

[
  {"name": "Alice", "birthday": "1990-01-01"},
  {"name": "Bob", "birthday": "1985-05-15"}
]
json_str_dates = '''
[
  {"name": "Alice", "birthday": "1990-01-01"},
  {"name": "Bob", "birthday": "1985-05-15"}
]
'''

df = pd.read_json(json_str_dates, convert_dates=['birthday'])
print(df)
print(df.dtypes)

输出将显示birthday列的数据类型已经被转换为datetime64[ns]

2.5 按行读取大型JSON文件

对于非常大的JSON文件,我们可以使用lines=True参数按行读取数据,并使用chunksize参数指定每次读取的行数。这有助于我们有效地处理大文件而不消耗过多的内存:

for chunk in pd.read_json('large_file.jsonl', lines=True, chunksize=1000):
    process(chunk)  # 假设process是一个处理DataFrame的函数

在这个例子中,我们假设large_file.jsonl是一个按行组织的JSON文件(也称为JSON Lines),并使用lines=Truechunksize=1000参数来按块读取数据。然后,我们可以在循环中处理每个数据块。

三、总结

pd.read_json()函数是Pandas库中用于读取JSON数据的重要工具。通过灵活使用其参数,我们可以有效地处理各种复杂结构和格式的JSON数据。无论是从文件中读取JSON数据,还是处理JSON字符串,pd.read_json()都能为我们提供极大的便利。希望本文的解析和案例能够帮助你更好地理解和使用这个函数。

转载请注明出处或者链接地址:https://www.qianduange.cn//article/14029.html
评论
发布的文章

HTML5 移动开发秘籍(一)

2024-08-05 23:08:12

【HTML5系列教程】

2024-08-05 23:08:12

HTML5面试题

2024-08-05 23:08:06

JQuery基础---01

2024-08-05 23:08:34

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!