[PYTHON] Ajouter des totaux aux lignes et aux colonnes avec des pandas

Je l'écrirai sous forme de mémorandum lors de l'utilisation de * pandas *. C'est ce que dit la réponse ici.

df = pd.concat([df,pd.DataFrame(df.sum(axis=0),columns=['Grand Total']).T])
df = pd.concat([df,pd.DataFrame(df.sum(axis=1),columns=['Total'])],axis=1)

Les bases de * pandas * sont résumées dans le manuel officiel afin qu'il puisse être lu en 10 minutes environ.

Comme données de test, nous utiliserons des informations météorologiques passées qui peuvent être téléchargées à partir de l'Agence météorologique. Les conditions météorologiques totales pour Tokyo pendant un an (janvier-décembre 2013) sont totalisées mensuellement et le total des lignes et des colonnes est calculé.

Agence météorologique | Télécharger les données météorologiques antérieures

気象庁 過去の気象データ・ダウンロード.png

Cadre environnemental

Rendre la bibliothèque Python indépendante disponible dans pyvenv.

$ PYVENV_DIR=$HOME/.pyvenv/data-analytics
$ pyvenv-3.4 $PYVENV_DIR
$ source $PYVENV_DIR/bin/activate
$ pip install pandas

Appelons le fichier téléchargé de l'Agence météorologique weather-tokyo-2013.csv. Comme il est difficile de gérer les * pandas * lors de leur téléchargement, un pré-traitement est effectué.

Confirmation de la lecture des données avec les pandas

>>> import pandas as pd

# Read CSV file, whose "day" column is parsed with `dateutil.parser.parse`.
>>> fname = 'weather-tokyo-2013.csv'
>>> df = pd.read_csv(fname, parse_dates=['day'])

# Check DataFrame overview.
>>> df.dtypes
>>> df.head(3)
>>> df.describe()

J'ai pu confirmer que le fichier CSV était chargé dans * DataFrame *.

Extrayez ensuite la partie "mois" de la colonne "jour" et ajoutez-la à la colonne "mois". La colonne "jour" est reconnue comme une date et une heure lors de la lecture du CSV, vous pouvez donc utiliser l'API datetime.

>>> df['month'] = df['day'].apply(lambda x: x.month)

Agréger par groupby et ajouter la valeur totale des lignes et des colonnes

>>> grouped = df.groupby(['weather_day', 'month'])['day'].count()
>>> type(grouped)
>>> grouped.index
>>> grouped.head(3)

La valeur de retour de groupby est * Series *, utilisez donc la méthode ʻunstack` pour la convertir en * DataFrame *. Cela vous permettra de calculer les totaux des lignes et des colonnes dans le processus d'ouverture, dans ce cas les totaux mensuels pour l'aperçu météorologique.

>>> monthly = grouped.unstack()

# Add "Total" column on each row.
>>> monthly = pd.concat([monthly,
                         pd.DataFrame(monthly.sum(axis=1), columns=['Total'])],
                        axis=1)
# Add "Grand Total" row on each column.
>>> monthly = pd.concat([monthly,
                         pd.DataFrame(monthly.sum(axis=0), columns=['Grand Total']).T])

En plus des sommes simples, vous pouvez également filtrer par nom de ligne ou de colonne pour additionner. En considérant un jour avec "pluie" dans les conditions météorologiques comme un jour de pluie et un jour avec "bien" comme un jour ensoleillé, le nom d'index peut être utilisé pour calculer comme suit. (Étant donné que les données réelles incluent des conditions météorologiques telles que "pluie temporaire ensoleillée", il y a des jours où elles sont dupliquées.)

>>> monthly = pd.concat([monthly,
                         pd.DataFrame(monthly[monthly.index.map(lambda x: 'pluie' in x)].sum(axis=0), columns=['Rainy']).T])
>>> monthly = pd.concat([monthly,
                         pd.DataFrame(monthly[monthly.index.map(lambda x: 'Bien' in x)].sum(axis=0), columns=['Fine']).T])

Enfin, écrivez les résultats agrégés dans un fichier texte. Vous pouvez contrôler l'en-tête, le nom de l'index, etc. avec des arguments facultatifs. Par exemple, le délimiteur est spécifié par * sep *.

>>> fname = 'weather-tokyo-2013-monthly-weather_name.csv'
>>> monthly.to_csv(fname, sep=',')

Après cela, vérifiez le résultat avec un logiciel de calcul de table tel qu'Excel.

Dessinez un graphique en utilisant ipython

Vous pouvez ouvrir le fichier de données dans Excel et dessiner le graphique, mais vous pouvez également dessiner en Python en utilisant * matplotlib *. Si vous souhaitez l'utiliser pendant un certain temps, utilisez * ipython *. Il effectuera les tâches du traitement de dessin graphique dans les coulisses.

$ pip install matplotlib ipython
$ ipython

Vous êtes maintenant dans le shell interactif IPython. Lisez les données que vous venez d'exporter et dessinez un graphique de la transition mensuelle entre les jours ensoleillés et pluvieux.


In [1]: import pandas as pd

In [2]: pd.options.display.mpl_style = 'default'

In [3]: fname = 'weather-tokyo-2013-monthly-weather_name.csv'

In [4]: df = pd.read_csv(fname, index_col=0)

In [5]: df.T[['Fine', 'Rainy']][:12].plot(color=['r', 'b']).set_xlabel('Month')
Out[5]: <matplotlib.text.Text at 0x106cb89e8>

Un graphique comme celui-ci doit être dessiné dans une fenêtre séparée.

月別の天候変化_東京.png

Comme il pleut en juin, il pleut beaucoup (moins de la moitié du nombre de jours), et vous pouvez voir qu'il n'y a presque pas de jours de pluie en janvier. Le temps change facilement en octobre, mais il semble qu'il y ait encore plus de jours ensoleillés que de jours pluvieux. De plus, étant donné que les conditions d'agrégation approximatives sont faciles à mettre en œuvre et que les fluctuations sont faciles à comprendre, lors de l'analyse détaillée, agrégons les valeurs de l'aperçu météorologique après les avoir catégorisées.

Recommended Posts

Ajouter des totaux aux lignes et aux colonnes avec des pandas
[Python] Ajouter le nombre total de lignes à Pandas DataFrame
Ajouter une série à la colonne dans les pandas python
[Python] Permutation des lignes et des colonnes de données Numpy
Ajouts clés aux pandas 1.1.0 et 1.0.0
Permuter les colonnes dans les trames de données pandas
Fonction pratique pour ajouter des colonnes n'importe où dans Pandas DataFrame
Comment créer une trame de données et jouer avec des éléments avec des pandas
[Python] Comment supprimer des lignes et des colonnes dans une table (liste des options de méthode de dépôt)
Comment écrire sobrement avec des pandas
Comment utiliser les colonnes calculées dans CASTable
Chargez csv avec des colonnes en double dans pandas
Comment changer plusieurs colonnes de csv dans Pandas (Unixtime-> Japan Time)
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
Créez un tableau vide avec Numpy pour ajouter des lignes pour chaque boucle
Dans Jupyter, ajoutez IPerl au noyau.
Comment réattribuer un index dans pandas dataframe
[Python] pandas à bien comprendre en 10 minutes
Il est vraiment utile d'ajouter les méthodes save () et load () à Target dans Luigi
Comment lire des fichiers CSV avec Pandas
Comment utiliser is et == en Python
Comment utiliser les pandas Timestamp et date_range
La première étape de l'analyse du journal (comment formater et mettre les données du journal dans Pandas)
[Pandas] Comment vérifier les doublons dans un tableau et supprimer les doublons (équivalent à supprimer les doublons dans Excel)
Comment générer une séquence en Python et C ++
Ajouter des lignes à un tableau vide avec numpy
Supprimer les lignes avec des valeurs arbitraires dans pandas DataFrame
Envoyer un message à Skype et Chatwork en Python
L'en-tête est mal aligné avec read_csv () et read_table () de Pandas
Pour ajouter un module à python que vous mettez dans Julialang
Ajouter une requête à l'URL analysée par URL et revenir à l'URL d'origine
Supprimer les lignes avec des index en double dans pandas DataFrame
Pour représenter la date, l'heure, l'heure et les secondes en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Afficher et analyser uniquement certaines colonnes dans CASTable
Comment diviser les données de formation en machine learning en variables objectives et autres dans Pandas
[Python] Lire le csv japonais avec des pandas sans caractères déformés (extraire davantage les colonnes écrites en japonais)
Convertir la date et l'heure zonées en temps Unixtime dans Python2.7
[Python] [Django] Comment utiliser le champ de choix et comment ajouter des options
Diverses méthodes pour extraire les colonnes du tableau NumPy
Autoriser Keras 2.0 et OpenCV 3.2 à fonctionner dans un environnement GPU
Ajouter un complément automatique à la programmation EV3 Micropyhon dans VS Code
Fonction pour renvoyer plusieurs colonnes à des colonnes uniques dans DataFrame
Comment définir Decorator et Decomaker avec une seule fonction
numpy memorandum 2 / transpose n'échange pas seulement les lignes et les colonnes
Convertir des chaînes numériques séparées par des virgules en nombres dans Pandas DataFrame
Comment accéder avec cache lors de la lecture_json avec pandas
Ajouter des disques pour étendre la zone SWAP et / home du LVM
Écrire des tests en Python pour profiler et vérifier la couverture
[Spark] Une histoire sur le fait d'être accro aux pièges de "", null et [] dans DataFrame
Comment ajouter des numéros de page à un fichier PDF (en Python)
J'ai essayé de résumer comment utiliser les pandas de python
Comment utiliser Decorator dans Django et comment le créer
Sortie d'un vidage binaire en binaire et retour dans un fichier binaire
Convertissez les variables numériques en variables catégorielles avec les pandas en définissant un seuil
Aller à la langue pour voir et se souvenir du langage Partie 7 C en langage GO
Comment obtenir des histogrammes RVB et HSV avec OpenCV
[python] Utilisez DataFrame pour étiqueter ensemble des variables et des tableaux arbitraires et les enregistrer dans csv [pandas]