Fonction Pandas pd.read_json()

Python math 模块Fonctions courantes de Pandas


read_json()C'est une fonction de la bibliothèque pandas utilisée pour lire des fichiers JSON (JavaScript Object Notation), prenant en charge l'importation de données dans plusieurs formats JSON.

JSON est un format d'échange de données léger, facile à lire et à écrire pour les humains, et facile à analyser et à générer pour les machines. Il est largement utilisé dans des scénarios tels que les API Web et les fichiers de configuration.read_json()Il peut convertir des données JSON au format DataFrame de pandas, ce qui facilite l'analyse des données.


Syntaxe de base et paramètres

Format de syntaxe

pandas.read_json(path_or_buf, orient=None, typ='frame', dtype=None,
                convert_axes=None, convert_dates=True, keep_default_dates=True,
                numpy=False, precise_float=False, date_unit='ms', ...)

Description du paramètre

ParamètreTypeDescriptionValeur par défaut
path_or_bufstr, objet de type chemin, ou objet de type fichierChemin d'accès au fichier JSON, URL ou chaîne de caractèresRequis
orientstrLe format des données JSON : 'split', 'records', 'index', 'columns', 'values'Aucune
typstrType de retour : 'frame' renvoie un DataFrame, 'series' renvoie une Series'frame'
dtypedictSpécifier les types de données des colonnesAucune
convert_axesboolIndique s'il faut convertir les axes en datetimeAucune
convert_datesbool, listIndique s'il faut convertir les colonnes de dateTrue
numpyboolIndique s'il faut utiliser des tableaux numpyFalse

Valeur de retour

  • Type de retour:pd.DataFrameoupd.Series
  • Renvoie un DataFrame par défaut, qui peut se présenter sous la forme d'un tableau à deux dimensions.
  • Quandtyp='series'Renvoie une Series lorsque typ='series'.

Exemples

À travers les exemples suivants, maîtrisez de manière exhaustiveread_json()les différentes utilisations.

Exemple 1 : Lecture de données JSON dans différents formats

Les données JSON ont plusieurs formats,read_json()[Il] prend en charge les formats les plus courants.

Exemple

import pandas as pd
import json

# Exemple de données : format de tableau JSON (format records)
json_records = '''
[
    {"name": "Tom", "age": 28, "city": "Beijing", "salary": 8000},
    {"name": "Jerry", "age": 35, "city": "Shanghai", "salary": 12000},
    {"name": "Mike", "age": 42, "city": "Guangzhou", "salary": 15000}
]
'''


# Écrire la chaîne JSON dans un fichier
with open('data_records.json', 'w', encoding='utf-8') as f:
    f.write(json_records)

# Lire le fichier JSON (format records, le plus couramment utilisé)
# orient='records' signifie que chaque ligne est un objet JSON
df_records = pd.read_json('data_records.json', orient='records')
print("Format des enregistrements :")
print(df_records)
print()

# Exemple de données : format d'objet JSON (format index)
json_index = '''
{
    "Tom": {"age": 28, "city": "Beijing", "salary": 8000},
    "Jerry": {"age": 35, "city": "Shanghai", "salary": 12000},
    "Mike": {"age": 42, "city": "Guangzhou", "salary": 15000}
}
'''


with open('data_index.json', 'w', encoding='utf-8') as f:
    f.write(json_index)

# Lire le fichier JSON (format index, en utilisant un champ comme index)
df_index = pd.read_json('data_index.json', orient='index')
print("Format de l'index :")
print(df_index)
print()

# Exemple de données : format de colonnes JSON (format en colonnes)
json_columns = '''
{
    "name": ["Tom", "Jerry", "Mike"],
    "age": [28, 35, 42],
    "city": ["Beijing", "Shanghai", "Guangzhou"],
    "salary": [8000, 12000, 15000]
}
'''


with open('data_columns.json', 'w', encoding='utf-8') as f:
    f.write(json_columns)

# Lire le fichier JSON (format colonnes)
df_columns = pd.read_json('data_columns.json', orient='columns')
print("Format des colonnes :")
print(df_columns)

Sortie attendue :

Records 格式:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   35   Shanghai   12000
2   Mike   42  Guangzhou   15000

Index 格式:
         age       city  salary
Tom       28    Beijing    8000
Jerry    35   Shanghai   12000
Mike     42  Guangzhou   15000

Columns 格式:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   参数          Shanghai   12000
2   Mike   42  Guangzhou   15000

Explication du code :

  • orient='records': Format de tableau JSON, chaque ligne est un objet JSON, le format le plus couramment utilisé.
  • orient='index': Format d'objet JSON, les clés servent d'index.
  • orient='columns': Format de colonnes JSON, les clés sont des noms de colonnes, les valeurs sont des tableaux.
  • Spécifier correctement leorientparamètre est crucial pour analyser correctement les données JSON.

Exemple 2 : Lecture de JSON à partir de chaînes et d'URL

read_json()Non seulement il peut lire des fichiers, mais il prend également en charge la lecture de données à partir de chaînes et d'URL.

Exemple

import pandas as pd
import json
from io import StringIO

# Exemple 2a : Lire à partir d'une chaîne JSON
json_string = '''
[
    {"product": "A", "sales": 100, "region": "North"},
    {"product": "B", "sales": 200, "region": "South"},
    {"product": "C", "sales": 150, "region": "East"}
]
'''


# Utiliser StringIO pour convertir la chaîne en objet fichier
df_from_string = pd.read_json(StringIO(json_string))
print("Lecture depuis la chaîne :")
print(df_from_string)
print()

# Vous pouvez également passer la chaîne JSON directement dans le paramètre
# Remarque : les chaînes Python doivent être correctement échappées
json_str_direct = '[{"product": "A", "sales": 100}, {"product": "B", "sales": 200}]'
df_direct = pd.read_json(json_str_direct)
print("Passer la chaîne directement :")
print(df_direct)
print()

# Exemple 2b : lire le format JSON Lines (un objet JSON par ligne)
# JSON Lines est un format de journal courant
json_lines = '''{"name": "Tom", "score": 85}
{"name": "Jerry", "score": 92}
{"name": "Mike", "score": 78}
{"name": "Lucy", "score": 95}'''


with open('data_lines.json', 'w', encoding='utf-8') as f:
    f.write(json_lines)

# Le format JSON Lines nécessite une lecture ligne par ligne
# Vous pouvez utiliser le paramètre lines=True (si le format JSONL le prend en charge)
# Ou traitez-le manuellement
df_list = []
with open('data_lines.json', 'r', encoding='utf-8') as f:
    for line in f:
        df_list.append(json.loads(line))

df_lines = pd.DataFrame(df_list)
print("Lecture du format JSON Lines :")
print(df_lines)
print()

# Exemple 2c : Lire depuis une URL d'API (nécessite un accès réseau)
# Une API d'exemple est utilisée ici ; remplacez-la par une véritable URL lors de l'utilisation réelle
# df_api = pd.read_json('https://api.example.com/data')
# print(df_api)
print("Remarque : La lecture depuis une URL nécessite une véritable requête réseau")

Sortie attendue :

从字符串读取:
  product  sales region
0       A    100   North
1       B    200   South
2       C    150    East

直接传入字符串:
  product  sales
0       A    100
1       B    200

JSON Lines 格式读取:
    name  score
0    Tom     85
1  Jerry     92
2    Mike     78
3    Lucy     95

注意:从 URL 读取需要实际的网络请求

Explication du code :

  • read_json()Il peut accepter une chaîne JSON en entrée ; utilisezStringIOpour convertir la chaîne en un objet de type fichier.
  • Le format JSON Lines comporte un objet JSON indépendant par ligne, couramment utilisé dans le traitement des journaux ; il doit être lu ligne par ligne puis fusionné dans un DataFrame.
  • Lors de la lecture depuis une URL, passez simplement la chaîne d'URL directement, mais une prise en charge du réseau est requise.

Exemple 3 : Gestion des dates et conversion de types

Les dates et les types numériques dans les données JSON nécessitent un traitement particulier.

Exemple

import pandas as pd

# Exemple 3a : Gérer les champs de date
json_with_date = '''
[
    {"name": "Tom", "birthday": "1995-03-15", "join_date": "2020-01-10"},
    {"name": "Jerry", "birthday": "1988-07-22", "join_date": "2019-03-05"},
    {"name": "Mike", "birthday": "1981-11-30", "join_date": "2018-06-20"}
]
'''


with open('data_with_date.json', 'w', encoding='utf-8') as f:
    f.write(json_with_date)

# Par défaut, les chaînes de date sont lues comme type object
df_date = pd.read_json('data_with_date.json')
print("Lecture par défaut (dates sous forme de chaînes) :")
print(df_date)
print("type de birthday :", df_date['birthday'].dtype)
print()

# Utilisez convert_dates pour convertir automatiquement les colonnes de dates
df_date_converted = pd.read_json('data_with_date.json', convert_dates=['birthday', 'join_date'])
print("Après conversion des dates :")
print(df_date_converted)
print("type de birthday :", df_date_converted['birthday'].dtype)
print()

# Exemple 3b : Spécifier les types de données
json_mixed = '''
[
    {"id": "1", "name": "Tom", "score": 85.5},
    {"id": "2", "name": "Jerry", "score": 92.0},
    {"id": "3", "name": "Mike", "score": 78.5}
]
'''


with open('data_mixed.json', 'w', encoding='utf-8') as f:
    f.write(json_mixed)

# Par défaut, id est lu comme un entier, name comme une chaîne de caractères, et score comme un flottant
df_mixed = pd.read_json('data_mixed.json')
print("Inférence de type par défaut :")
print(df_mixed)
print("type de id :", df_mixed['id'].dtype)
print()

# Utilisez dtype pour spécifier explicitement les types
df_typed = pd.read_json('data_mixed.json', dtype={'id': str, 'score': float})
print("Après avoir spécifié les types :")
print(df_typed)
print("type de id :", df_typed['id'].dtype)

Sortie attendue :

默认读取(日期为字符串):
    name    birthday    join_date
0    Tom  1995-03-15  2020-01-10
1  Jerry  1988-07-22  2019-03-05
2    Mike  1981-11-30  2018-06-20

默认读取(日期为字符串):
    name    birthday    join_date
0    汤    Tom  1995-03-15  pandas 的 to_json() 和 read_json() 的完整配对示例
1  Jerry  1988-07-22  2019-03-05
2    Mike  1981-11-30  确保 JSON 数据格式一致
    1981-配对    to_json(orient='records')  配对    read_json(orient='records')
3   Mike  1981-11-30  to_json(orient='records')
...
    join_date    2018-06-20

birthday 类型: object

转换日期后:
birthday 类型: datetime64[ns]

Explication du code :

  • convert_datesLe paramètre peut spécifier quelles colonnes doivent être converties en types de date.
  • Par défaut,convert_dates=True[Il] reconnaît automatiquement les formats de date courants.
  • dtypeLe paramètre peut spécifier explicitement le type de données de chaque colonne, évitant ainsi les erreurs d'inférence de type.

Notes

  • Spécifier correctement leorientLe paramètre est la clé pour lire des données JSON ; différentes structures JSON nécessitent différentes valeurs orient.
  • Les dates dans JSON sont lues sous forme de chaînes de caractères par défaut ; vous devez utiliser leconvert_datesparamètre pour les convertir en types de date.
  • Lors de la lecture de fichiers JSON volumineux, envisagez d'utiliser lechunksizeparamètre pour lire par blocs.
  • read_json()[Il] prend en charge la lecture à partir de chemins de fichiers, d'URL et de chaînes JSON.
  • Le format JSON Lines doit être analysé ligne par ligne, puis fusionné dans un DataFrame.

Résumé

read_json()C'est la fonction principale de pandas pour lire des données JSON, prenant en charge plusieurs formats JSON. En tant que format courant pour les API Web et l'échange de données, JSON est largement utilisé dans le travail pratique d'analyse de données.

Maîtriserread_json()l'essentiel est de comprendre les différentsorientformats, ainsi que les méthodes de gestion des dates et des types. Il est conseillé aux lecteurs de s'exercer à lire des données JSON dans différents formats dans leur travail réel.

Python math 模块Fonctions courantes de Pandas

Autres extensions