Fonction Pandas pd.read_json()
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ètre | Type | Description | Valeur par défaut |
|---|---|---|---|
| path_or_buf | str, objet de type chemin, ou objet de type fichier | Chemin d'accès au fichier JSON, URL ou chaîne de caractères | Requis |
| orient | str | Le format des données JSON : 'split', 'records', 'index', 'columns', 'values' | Aucune |
| typ | str | Type de retour : 'frame' renvoie un DataFrame, 'series' renvoie une Series | 'frame' |
| dtype | dict | Spécifier les types de données des colonnes | Aucune |
| convert_axes | bool | Indique s'il faut convertir les axes en datetime | Aucune |
| convert_dates | bool, list | Indique s'il faut convertir les colonnes de date | True |
| numpy | bool | Indique s'il faut utiliser des tableaux numpy | False |
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.
- Quand
typ='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 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 le
orientparamè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 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
# 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 le
orientLe 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 le
convert_datesparamètre pour les convertir en types de date. - Lors de la lecture de fichiers JSON volumineux, envisagez d'utiliser le
chunksizeparamè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.
Fonctions courantes de Pandas