Lecture et écriture de données avec Pandas
Pandas fournit un ensemble riche de fonctions pour lire et écrire divers formats de données. En plus des formats CSV et Excel couramment utilisés, il prend également en charge les bases de données SQL, les tableaux HTML, Parquet et d'autres formats. Cette section présente ces fonctions d'E/S complémentaires pour vous aider à gérer de manière flexible l'importation et l'exportation de données dans différents scénarios.
Aperçu des fonctions d'E/S principales
La fonctionnalité d'E/S de Pandas est très puissante et prend en charge la lecture et l'écriture de plusieurs formats de données. Voici les fonctions de lecture et d'écriture couramment utilisées :
| Fonctions de lecture | Fonctions d'écriture | Formats pris en charge | Scénarios typiques |
|---|---|---|---|
pd.read_csv() |
to_csv() |
CSV、TSV | Fichiers journaux, données tabulaires |
pd.read_excel() |
to_excel() |
Excel(.xlsx, .xls) | Rapports commerciaux, données financières |
pd.read_sql() |
to_sql() |
Bases de données SQL | Interaction avec les bases de données d'entreprise |
pd.read_html() |
- | Tableaux HTML | Extraction de données web |
pd.read_parquet() |
to_parquet() |
Apache Parquet | Analyse et stockage de big data |
pd.read_feather() |
to_feather() |
Format Feather | Lecture/écriture rapide, données en mémoire |
pd.read_json() |
to_json() |
JSON | Données d'API, services web |
pd.read_pickle() |
to_pickle() |
Python pickle | Sérialiser des objets Python |
Les différents formats ont différents scénarios d'application. CSV est un format universel mais les fichiers sont volumineux ; Parquet est un stockage en colonnes, adapté à l'analyse de big data ; Excel convient à la consultation manuelle mais pas à de gros volumes de données.
Fichiers CSV et texte
CSV (valeurs séparées par des virgules) est le format d'échange de données le plus universel, et Pandas fournit le support le plus complet pour celui-ci.
Paramètres de lecture courants
Exemple
# Lecture de base
df = pd.read_csv("data.csv")
# Spécifier le délimiteur (CSV par défaut : virgule, TSV : tabulation)
df_tsv = pd.read_csv("data.tsv", sep="\t")
# Spécifier l'encodage (couramment utilisé pour les fichiers chinois)
df_utf8 = pd.read_csv("data.csv", encoding="utf-8")
df_gbk = pd.read_csv("data.csv", encoding="gbk")
# Ignorer des lignes (ignorer les lignes après l'en-tête ou les lignes de commentaire)
df = pd.read_csv("data.csv", skiprows=3) # Ignorer les 3 premières lignes
df = pd.read_csv("data.csv", skiprows=[2, 4]) # Ignorer les lignes 2 et 4
# Utiliser la ligne d'en-tête (première ligne par défaut)
df = pd.read_csv("data.csv", header=0) # Utiliser la ligne 0 comme en-tête
df = pd.read_csv("data.csv", header=None) # Ne pas utiliser d'en-tête, générer automatiquement 0,1,2...
# Spécifier les noms de colonnes
df = pd.read_csv("data.csv", names=["ID", "Nom", "Âge", "Ville"])
# Spécifier la colonne d'index
df = pd.read_csv("data.csv", index_col=0) # Utiliser la colonne 0 comme index
df = pd.read_csv("data.csv", index_col=["Name"]) # Plusieurs colonnes comme index composé
Traitement des valeurs manquantes
Exemple
import numpy as np
# Spécifier quelles valeurs sont traitées comme valeurs manquantes
df = pd.read_csv(
"data.csv",
na_values=["NA", "null", "NULL", "N/A", "", " "] # Ces valeurs seront toutes reconnues comme NaN
)
# Différentes colonnes peuvent utiliser différents marqueurs de valeurs manquantes
df = pd.read_csv(
"data.csv",
na_values={
"Age": ["Unknown", "0"], # Valeur manquante pour la colonne "Age"
"City": ["Unknown"] # Valeur manquante pour la colonne "City"
}
)
# Conserver certaines valeurs comme valeurs normales (non reconnues comme valeurs manquantes)
df = pd.read_csv("data.csv", keep_default_na=False)
Écriture de fichiers CSV
Exemple
# Préparer les données de test
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si", "Wang Wu"],
"Âge": [25, 30, 28],
"Ville": ["Beijing", "Shanghai", "Guangzhou"]
})
# Écrire un CSV (avec index par défaut)
df.to_csv("output.csv")
# Ne pas écrire l'index
df.to_csv("output.csv", index=False)
# Spécifier le délimiteur
df.to_csv("output.csv", sep="\t")
# Ne pas écrire l'en-tête
df.to_csv("output.csv", header=False)
# Spécifier l'encodage
df.to_csv("output.csv", encoding="utf-8-sig") # Avec BOM, adapté pour l'ouverture dans Excel
Fichiers JSON
JSON (JavaScript Object Notation) est le format de données le plus courant dans les applications Web. Pandas fournit des fonctions de lecture et d'écriture flexibles.
Structure JSON et méthodes de lecture
Les structures de données JSON se présentent sous de nombreuses formes. Lors de la lecture, vous devez choisir les paramètres appropriés en fonction de la structure réelle :
Exemple
import json
# Préparer des données JSON de test
data_records = '''
[
{"name": "Zhang San", "age": 25, "city": "Beijing"},
{"name": "Li Si", "age": 30, "city": "Shanghai"},
{"name": "Wang Wu", "age": 28, "city": "Guangzhou"}
]
'''
# Méthode 1 : tableau JSON (un objet par ligne) -> DataFrame
df = pd.read_json(data_records, orient="records")
print("orient='records':")
print(df)
print()
# Méthode 2 : objet JSON (paires clé-valeur) -> Series
data_dict = '{"name": "Zhang San", "age": 25, "city": "Beijing"}'
s = pd.read_json(data_dict, typ="series")
print("Lire comme Series :")
print(s)
Format JSON Lines
JSON Lines (.jsonl) est un format où chaque ligne est un objet JSON complet, couramment utilisé dans les scénarios de journalisation et de mégadonnées :
Exemple
# Données au format JSON Lines
jsonl_data = '''{"name": "Zhang San", "age": 25}
{"name": "Li Si", "age": 30}
{"name": "Wang Wu", "age": 28}
{"name": "Zhao Liu", "age": 35}
'''
# Écrire un fichier JSON Lines
with open("data.jsonl", "w", encoding="utf-8") as f:
f.write(jsonl_data)
# Lire JSON Lines (chaque ligne est un objet JSON)
df = pd.read_json("data.jsonl", lines=True)
print(df)
Écriture de JSON
Exemple
df = pd.DataFrame({
"Nom": ["Zhang San", "Li Si", "Wang Wu"],
"Âge": [25, 30, 28],
"Ville": ["Beijing", "Shanghai", "Guangzhou"]
})
# Écrire du JSON avec différentes valeurs de orient
df.to_json("output_records.json", orient="records", force_ascii=False, indent=2)
df.to_json("output_index.json", orient="index", force_ascii=False, indent=2)
df.to_json("output_columns.json", orient="columns", force_ascii=False, indent=2)
# Format JSON Lines
df.to_json("output.jsonl", orient="records", lines=True, force_ascii=False)
Sérialisation Pickle
Pickle est le format de sérialisation d'objets natif de Python, qui peut sauvegarder n'importe quel objet Python, y compris les DataFrames et les structures imbriquées complexes.
Exemple
import pickle
# Créer un DataFrame avec une structure complexe
df = pd.DataFrame({
"A": range(10),
"B": range(10, 20),
"C": ["foo", "bar"] * 5
})
# Écrire un fichier Pickle
df.to_pickle("data.pkl")
# Lire un fichier Pickle
df_loaded = pd.read_pickle("data.pkl")
print(df_loaded)
# Écriture compressée (compression gzip, fichier plus petit)
df.to_pickle("data.pkl.gz", compression="gzip")
df_loaded = pd.read_pickle("data.pkl.gz", compression="gzip")
Le format Pickle ne peut être lu que par Python et ne convient pas pour l'échange de données entre langages. De plus, le chargement de fichiers Pickle à partir de sources non fiables présente un risque de sécurité ; ne chargez pas de fichiers .pkl d'origine inconnue.
Performances et sélection des scénarios
Les différents formats de données ont des caractéristiques de performance différentes. Choisir le format approprié peut grandement améliorer l'efficacité :
| Format | Vitesse de lecture | Vitesse d'écriture | Taille du fichier | Scénario applicable |
|---|---|---|---|---|
| CSV | Lent | Moyenne | grand | Format d'échange universel, lisible par l'humain |
| Parquet | Très rapide | Rapide | Très minime | Analyse de big data, requête en colonnes |
| Feather | Extrêmement rapide | Extrêmement rapide | grand | Transfert rapide de données en mémoire |
| Pickle | Rapide | Rapide | Moyenne | Persistance d'objets Python |
| JSON | Lent | Moyenne | Très volumineux | API Web, multi-langage |
Problèmes courants et précautions
1. Mémoire insuffisante lors de la lecture de fichiers volumineux
Pour les fichiers CSV ou JSON très volumineux, vous pouvez utiliser lechunksizeparamètre pour lire par morceaux, évitant de tout charger en mémoire d'un coup.
2. Problèmes d'encodage chinois
Lors du traitement de fichiers chinois, veillez à spécifier l'encodage correct. Les encodages courants incluent utf-8, gbk, gb2312, utf-8-sig (BOM), etc.
3. Fichier corrompu après l'écriture
Avant d'écrire des données importantes, il est recommandé de d'abord lire et vérifier. Lors de l'écriture de fichiers volumineux, l'utilisation d'un format compressé peut réduire les E/S disque et diminuer le risque de corruption des données.
4. Limitations du format Excel
Excel 2003 (.xls) prend en charge au maximum 65,536 lignes par feuille, tandis qu'Excel 2007 (.xlsx) prend en charge jusqu'à 1,048,576 lignes. Si la limite est dépassée, veuillez envisager d'autres formats.
Autres extensions