[PYTHON] Comment générer un CSV d'en-tête multiligne avec des pandas

Chose que tu veux faire

Je souhaite générer un tableau avec plusieurs lignes d'en-têtes comme celui ci-dessous au format CSV.

image.png

Je publierai l'article sous forme de mémorandum.

environnement

Méthode de réalisation

  1. Créez un DataFrame avec des colonnes MultiIndex
  2. Sortie avec la méthode to_csv de DataFrame

Comment créer un DataFrame

Passez dict à l'argument data du constructeur DataFrame.

df = pandas.DataFrame({
    ("Alice","Math"): [80,81],
    ("Alice","English"): [90,91],
    ("Bob","Math"): [70,71]
})

print(df)
#   Alice          Bob
#    Math English Math
# 0    80      90   70
# 1    81      91   71

print(df.columns)
# MultiIndex([('Alice',    'Math'),
#             ('Alice', 'English'),
#             (  'Bob',    'Math')],
#            )

Passez MultiIndex à l'argument columns du constructeur DataFrame

index = pandas.MultiIndex.from_tuples([
    ("Alice","Math"),
    ("Alice","English"),
    ("Bob","Math")
])

df2 = pandas.DataFrame([[80,90,70],[81,91,71]], columns=index)

print(df2)
#   Alice          Bob
#    Math English Math
# 0    80      90   70
# 1    81      91   71

print(df2.columns)
# MultiIndex([('Alice',    'Math'),
#             ('Alice', 'English'),
#             (  'Bob',    'Math')],
#            )

Passez une liste de dictionnaires dans l'argument data du constructeur DataFrame

Si l'argument du constructeur columns est None, le type de la propriété columns sera ʻIndex` et il ne sera pas possible de sortir avec un en-tête multiligne.

df3 = pandas.DataFrame(
    [
        {("Alice","Math"):80, ("Alice","English"):90,("Bob","Math"):70},
        {("Alice","Math"):81, ("Alice","English"):91,("Bob","Math"):71},
    ]
)

print(df3)
#    (Alice, Math)  (Alice, English)  (Bob, Math)
# 0             80                90           70
# 1             81                91           71

print(df3.columns)
# Index([('Alice', 'Math'), ('Alice', 'English'), ('Bob', 'Math')], dtype='object')

Vous pouvez générer un en-tête multiligne en passant «MultiIndex» dans l'argument «colonnes».

index = pandas.MultiIndex.from_tuples([
    ("Alice","Math"),
    ("Alice","English"),
    ("Bob","Math")
])

df3 = pandas.DataFrame(
    [
        {("Alice","Math"):80, ("Alice","English"):90,("Bob","Math"):70},
        {("Alice","Math"):81, ("Alice","English"):91,("Bob","Math"):71},
    ]
    ,columns=index
)

print(df3)
#   Alice          Bob
#    Math English Math
# 0    80      90   70
# 1    81      91   71

Sortie avec la méthode to_csv de DataFrame

df.to_csv("foo.csv", index=False)

foo.csv


Alice,Alice,Bob
Math,English,Math
80,90,70
81,91,71

Recommended Posts

Comment générer un CSV d'en-tête multiligne avec des pandas
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Sortie vers un fichier csv avec Python
[Python] Résumé de l'utilisation des pandas
Comment lire des fichiers CSV avec Pandas
Comment changer plusieurs colonnes de csv dans Pandas (Unixtime-> Japan Time)
[Python] Comment lire le fichier csv (méthode read_csv du module pandas)
Comment créer des exemples de données CSV avec hypothèse
Comment lire un fichier CSV avec Python 2/3
[Python] Comment lire des fichiers Excel avec des pandas
Comment spécifier des attributs avec Mock of Python
Comment implémenter "named_scope" de RubyOnRails avec Django
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Comment utiliser Pandas 2
Convertir 202003 en 2020-03 avec les pandas
Résumé de la lecture des données numériques avec python [CSV, NetCDF, Fortran binary]
Comment convertir des données détenues horizontalement en données détenues verticalement avec des pandas
Comment extraire des valeurs Null et des valeurs non Null avec des pandas
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
[Python] Comment gérer l'erreur de lecture pandas read_html
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
Comment déduire l'estimation MAP de HMM avec PyStruct
[Python-pptx] Afficher les informations de police PowerPoint au format csv avec python
Comment déduire une estimation MAP de HMM avec OpenGM
Comment apprendre le SVM structuré de ChainCRF avec PyStruct
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Résumé de la façon de partager l'état avec plusieurs fonctions
[Memo] Chargez le csv de s3 dans les pandas avec boto3
Lire csv avec des pandas python
Comment mettre à jour avec SQLAlchemy?
Comment utiliser Pandas Rolling
Comment lancer avec Theano
Comment modifier avec SQLAlchemy?
Écrire en csv avec Python
Comment séparer les chaînes avec ','
Comment faire RDP sur Fedora31
Comment supprimer avec SQLAlchemy?
Comment sortir un document au format pdf avec Sphinx
Comment activer la lecture / écriture de net.Conn avec Golang pour annuler avec le contexte
Comment afficher une liste des versions installables avec pyenv
[Python] Comment générer une table pandas dans un fichier Excel
Comment obtenir un aperçu de vos données dans Pandas
Comment lire un fichier Excel (.xlsx) avec Pandas [Python]
Comment créer une trame de données et jouer avec des éléments avec des pandas
Comment générer des informations supplémentaires lors de la sortie de journaux avec le module de journalisation de python
Comment générer le nombre de vues, de likes et de stocks d'articles publiés sur Qiita au format CSV (créé avec "Python + Qiita API v2")
Comment annuler RT avec Tweepy
Comment coller un fichier CSV dans un fichier Excel à l'aide de Pandas
Comment extraire des fonctionnalités de données de séries chronologiques avec les bases de PySpark
Python: comment utiliser async avec
[Hugo] Résumé de la façon d'ajouter des pages au site créé avec Learn
[Python] Ecrire dans un fichier csv avec Python
Résumé de l'utilisation de pandas.DataFrame.loc
Comment écrire sobrement avec des pandas
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
Pour utiliser virtualenv avec PowerShell
Etosetra lié à Pandas read_csv
Je veux sortir le début du mois prochain avec Python
Exportez le contenu de ~ .xlsx dans le dossier en HTML avec Python