[PYTHON] Essayez de convertir en données ordonnées avec les pandas

image

introduction

salut! Soudainement, je suis désolé, mais avez-vous déjà entendu le mot «** Tidy Data » (traduit par « données ordonnées **» en japonais)? J'ai récemment étudié Pandas dans un cours appelé Analyse des données Pandas avec Python Fundamentals dans Safari Books Online. Quand je faisais cela, le chapitre "Tidy Data" est sorti à la fin et je connaissais cette histoire. Qu'est-ce que «Tidy Data»? Tidy Data Par Hadley Wickham (qui est vénéré comme un dieu dans le monde de R). C'est un concept proposé dans l'article (2014) appelé html). Le papier a également une traduction japonaise, qui est présentée comme suit au début de la traduction.

Une traduction complète de l'article «Tidy Data» qui prônait le concept de «données ordonnées» pour une analyse efficace des données. Les données ordonnées sont un concept utile qui facilite l'analyse des données avec R et autres.

Tidy Data est un concept et une méthode de nettoyage / d'organisation des données, qui «occupent 80% du travail d'un analyste», aussi facilement et efficacement que possible. Le document a été rédigé en pensant à R d'après les antécédents de l'auteur, mais le cours Safari Online mentionné ci-dessus a montré comment implémenter ces modèles de nettoyage de données dans Python / Pandas. J'avais honte de dire que je n'avais jamais lu une bonne organisation des méthodes et méthodologies d'organisation des données dans l'analyse des données, donc c'était très inspirant d'écrire cet article.

: triangular_flag_on_post: (2019/3/2) Cet article a été publié en avril 2017, mais le livre pandas de Daniel Y. Chen "Pandas for Everyone", qui était conférencier dans le cours vidéo original de cet article "[Codage de base pour l'analyse de données Python / apprentissage automatique! Introduction à l'utilisation de la bibliothèque pandas](https://www.amazon.co.jp/Python%E3%83%87%E3%83%BC%E3%82] % BF% E5% 88% 86% E6% 9E% 90-% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AE% E5% 9F% BA% E6% 9C% AC% E3% 82% B3% E3% 83% BC% E3% 83% 87% E3% 82% A3% E3% 83% B3% E3% 82% B0-pandas% E3% 83% A9% E3% 82% A4% E3% 83% 96% E3% 83% A9% E3% 83% AA% E6% B4% BB% E7% 94% A8% E5% 85% A5% E9% 96% 80-impress-gear / dp / 4295005657 / ref = sr_1_3? S = books & ie = UTF8 & qid = 1551490253 & sr = 1-3 & keywords = pandas Traduit et publié le 22. Il existe également une explication ordonnée des données, je vais donc la présenter. image

Tout d'abord, je recommande des articles en japonais

L'auteur du site Colourless Green Ideas explique la traduction de l'article et l'idée de «données ordonnées» en japonais d'une manière très facile à comprendre.

Quel est le point des données ordonnées (Tidy Data)?

Pour plus d'informations, lisez l'article "Qu'est-ce que les données ordonnées" de mon explication amateur. Il est préférable de l'avoir, mais pour ceux qui sont occupés (même si c'est très difficile), je vais le résumer ci-dessous.

[Introduction (histoire d'Atarimae)]: triangular_flag_on_post: (octobre 2019) Modification de l'exemple d'explication [^ 1]

[^ 1]: (2019/10) Initialement, cet endroit a été décrit comme un exemple de mesure de la taille et du poids du corps, mais @acevif a commenté qu'il est inapproprié comme exemple, et je pense que c'est certainement le cas. J'ai donc modifié l'exemple. Veuillez vous référer à la section des commentaires pour plus de détails.

Voici une liste des «traitements effectués sur des patients dans des établissements médicaux et les valeurs qui en résultent». Si vous voulez connaître le résultat de chaque traitement pour chaque personne, vous pouvez le voir dans le sens de la ligne. Les résultats de chaque personne sont alignés dans le sens des lignes, ce qui est appelé «** observation ». En outre, les types de traitements effectués sont alignés dans le sens des rangées. Celles-ci sont appelées " variables **". C'est une forme facile à comprendre pour les humains.

image

[Signification et structure des données] Ici, en supposant qu'il existe un groupe de données (valeur observée) que «la valeur numérique du résultat de l'application d'un certain traitement à chaque patient était comme ça», lorsqu'on l'exprime comme un ensemble de données, c'est comme suit. Peut être représenté par diverses ** structures **.

image

Dans la structure ci-dessus ,: one: contient deux observations par ligne et: two: contient trois observations par ligne, mais la plus à droite: trois: contient une seule observation par ligne ( "Suite au traitement X effectué sur Mr. C, la valeur était de 3"). En d'autres termes, la forme de: trois: est ** la "sémantique" et la "structure" de la correspondance de données **. C'est le point important des «données ordonnées». Dans le document "Ordered Data", il est soutenu que "ce formulaire est plus facile à manipuler dans l'analyse des données (en plus d'être facile à comprendre pour les humains)". (Pour savoir pourquoi il est plus facile à gérer, voir "Structure et" dans l'article "Qu'est-ce que les données ordonnées". Voir la section "Importance de la correspondance des significations")

[En d'autres termes, que sont les "données ordonnées"? ] Pour le dire très grossièrement

――Il est plus facile de traiter les données à analyser ultérieurement lors de l'analyse des données (par exemple, agrégation ou tracé) en organisant et en convertissant les données de sorte que leur signification et leur structure correspondent. ――Il vaut mieux normaliser correctement les données à analyser ~

Je pense que c'est ce que cela signifie. image

Rangement des ensembles de données désordonnés

Dans le chapitre «Disposition des ensembles de données encombrés» de l'article «Tidy Data», énumérez cinq «modèles courants de données encombrées (données désordonnées)» et indiquez la direction de chaque organisation des données. Je suis. Dans ce qui suit, cet article présentera des exemples de la façon de les organiser avec les pandas.

Bien sûr, il existe de nombreuses autres façons de l'implémenter au niveau du code, ce n'est donc qu'un exemple. ――Pour la ligne de titre, j'ai utilisé l'expression dans la traduction japonaise mentionnée ci-dessus.

1. L'en-tête de colonne est une valeur, pas un nom de variable

Column headers are values, not variable names

[Exemple]

Voici un décompte du nombre de personnes par «religion» et «groupe de revenu» dans une enquête. Dans le tableau de gauche, «classe de revenu» est représentée par l'axe horizontal, mais il n'est pas bon que les titres des colonnes eux-mêmes, tels que «10 000 $ ou moins» et «10 à 20 000 $», contiennent des valeurs. Convertissez-le sous la forme de «données ordonnées» sur la droite.

image

[Explication de la méthode]

Cette conversion peut être facilement effectuée en utilisant [melt] de pandas (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.melt.html).

--id_vars = Spécifie la colonne de l'axe de base ("religion" dans l'exemple ci-dessus) --var_name = Donne un nom à la colonne qui sera une variable ("Range" dans l'exemple ci-dessus) --value_name = Nommez la colonne qui sera la valeur ("count" dans l'exemple ci-dessus)

[Exemple de conversion avec des pandas]

python3



In [1]: import pandas as pd
#Lire les données
In [2]: df=pd.read_excel('data/02_Religion.xls')

In [3]: print(df.head())
            religion  <$10k  $10-20k  $20-30k  $30-40k  $40-50k  $50-75k
0           Agnostic     27       34       60       81       76      137
1            Atheist     12       27       37       52       35       70
2           Buddhist     27       21       30       34       33       58
3           Catholic    418      617      732      670      638     1116
4  Don’tknow/refused     15       14       15       11       10       35

#Exécuter fondre
In [4]: df_long = pd.melt(df ,id_vars='religion', var_name='range', value_name='count')

# tidy-Converti au format de données
In [5]: print(df_long.head(n=10))
                religion  range  count
0               Agnostic  <$10k     27
1                Atheist  <$10k     12
2               Buddhist  <$10k     27
3               Catholic  <$10k    418
4      Don’tknow/refused  <$10k     15
5        EvangelicalProt  <$10k    575
6                  Hindu  <$10k      1
7  HistoricallyBlackProt  <$10k    228
8       Jehovah’sWitness  <$10k     20
9                 Jewish  <$10k     19

[Exemple 2]

Vous trouverez ci-dessous un ensemble de données de hit charts. Il contient les données de classement de la première semaine, de la deuxième semaine, etc. de la semaine classée dans le graphique, ainsi que des données telles que l'année, le titre de la chanson, l'artiste, etc. image

[Explication de la méthode]

Ceci est également converti en "données ordonnées". Vous pouvez utiliser melt comme dans l'exemple 1, mais dans cet exemple, il y a plusieurs colonnes d'axes. Puisqu'il y en a, spécifiez la colonne dans la liste comme id_vars = ['year', 'artist', 'track', 'time', 'date.entered']. Le reste est le même que dans l'exemple 1.

[Exemple de conversion avec des pandas]

python3


#Lire les données
In [15]: billboard = pd.read_excel('data/04_HitChart.xls')

In [16]: print(billboard.head())
   year         artist                    track      time date.entered  wk1  wk2  wk3
0  2000          2 Pac           Baby Don’t Cry  04:22:00   2000-02-26   87   82   72
1  2000        2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02   91   87   92
2  2000   3 Doors Down               Kryptonite  03:53:00   2000-04-08   81   70   68
3  2000           98^0  Give Me Just One Nig...  03:24:00   2000-08-19   51   39   34
4  2000        A*Teens            Dancing Queen  03:44:00   2000-07-08   97   97   96

#Exécuter fondre(id_vars donne dans la liste)
In [17]: billboard_long = pd.melt(billboard, id_vars=['year','artist','track','time','date.entered'], var_name='week', value_name
    ...: ='rank')

# tidy-Converti au format de données
In [18]: print(billboard_long.head(n=10))
   year           artist                    track      time date.entered week  rank
0  2000            2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk1    87
1  2000          2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk1    91
2  2000     3 Doors Down               Kryptonite  03:53:00   2000-04-08  wk1    81
3  2000             98^0  Give Me Just One Nig...  03:24:00   2000-08-19  wk1    51
4  2000          A*Teens            Dancing Queen  03:44:00   2000-07-08  wk1    97
5  2000          Aaliyah            I Don’t Wanna  04:15:00   2000-01-29  wk1    84
6  2000          Aaliyah                Try Again  04:03:00   2000-03-18  wk1    59
7  2000  Adams, Yolanda             Open My Heart  05:30:00   2000-08-26  wk1    76
8  2000            2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk2    82
9  2000          2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk2    87

2. Plusieurs variables sont stockées dans une colonne

Multiple variables are stored in one column

[Exemple]

Il s'agit de données sur la tuberculose (TB) et montre le nombre de patients tuberculeux par «sexe» et «groupe d'âge» en plus de «pays» et «année». m014 signifie homme (m) 0-14 ans, m1524 signifie homme (m) 15-24 ans. Si deux variables, "sexe" et "groupe d'âge", sont stockées dans une colonne de cette manière, ce n'est pas bon lorsque vous voulez analyser du point de vue du "sexe", "groupe d'âge", etc., la colonne doit donc être "sexe". Et «groupe d'âge». image

[Explication de la méthode]

[Exemple de conversion avec des pandas]

python3


#Lire les données
In [2]: tb = pd.read_excel('data/05_TB.xls')

In [3]: print(tb.head())
  country  year  m014  m1524  m2534  m3544  m4554  m5564   m65  mu  f014
0      AD  2000   0.0    0.0    1.0    0.0      0      0   0.0 NaN   NaN
1      AE  2000   2.0    4.0    4.0    6.0      5     12  10.0 NaN   3.0
2      AF  2000  52.0  228.0  183.0  149.0    129     94  80.0 NaN  93.0
3      AG  2000   0.0    0.0    0.0    0.0      0      0   1.0 NaN   1.0
4      AL  2000   2.0   19.0   21.0   14.0     24     19  16.0 NaN   3.0

#Exécuter fondre
In [4]: tb_long = pd.melt(tb, id_vars=['country','year'], var_name='variable', value_name='value')

In [5]: print(tb_long.head(n=10))
  country  year variable  value
0      AD  2000     m014    0.0
1      AE  2000     m014    2.0
2      AF  2000     m014   52.0
3      AG  2000     m014    0.0
4      AL  2000     m014    2.0
5      AM  2000     m014    2.0
6      AN  2000     m014    0.0
7      AO  2000     m014  186.0
8      AR  2000     m014   97.0
9      AS  2000     m014    NaN

#Extraire le premier caractère de la colonne variable et ajouter la colonne "gender"
In [6]: tb_long['gender'] = tb_long.variable.str[0]

#Extrayez le deuxième caractère et les suivants de la colonne variable et ajoutez la colonne "age"
In [7]: tb_long['age'] = tb_long.variable.str[1:]

#des colonnes de sexe et d'âge ont été ajoutées
In [8]: print(tb_long.head(n=10))
  country  year variable  value gender  age
0      AD  2000     m014    0.0      m  014
1      AE  2000     m014    2.0      m  014
2      AF  2000     m014   52.0      m  014
3      AG  2000     m014    0.0      m  014
4      AL  2000     m014    2.0      m  014
5      AM  2000     m014    2.0      m  014
6      AN  2000     m014    0.0      m  014
7      AO  2000     m014  186.0      m  014
8      AR  2000     m014   97.0      m  014
9      AS  2000     m014    NaN      m  014

3. Les variables sont stockées dans les lignes et les colonnes

Variables are stored in both rows and columns

[Exemple]

Il s'agit des données météorologiques quotidiennes d'une station météorologique au Mexique (MX17004). Le premier jour (j1), le deuxième jour (j2) et le jour sont alignés sur l'axe horizontal par rapport aux axes «année» et «mois», mais dans la colonne des éléments, les températures maximale et minimale du jour sont de 2 J'en ai un comme ligne. Il n'est pas bon que les faits observés soient stockés à la fois sur des lignes et des colonnes, alors organisez-les dans le formulaire de droite.

image

[Explication de la méthode]

[Exemple de conversion avec des pandas]

python3


#Lire les données
In [10]: weather = pd.read_excel('data/06_Weather.xls')

In [11]: print(weather.head())
        id  year  month element  d1    d2    d3  d4    d5  d6  d7  d8
0  MX17004  2010      1    tmax NaN   NaN   NaN NaN   NaN NaN NaN NaN
1  MX17004  2010      1    tmin NaN   NaN   NaN NaN   NaN NaN NaN NaN
2  MX17004  2010      2    tmax NaN  27.3  24.1 NaN   NaN NaN NaN NaN
3  MX17004  2010      2    tmin NaN  14.4  14.4 NaN   NaN NaN NaN NaN
4  MX17004  2010      3    tmax NaN   NaN   NaN NaN  32.1 NaN NaN NaN

#Exécuter fondre
In [12]: weather_melt = pd.melt(weather,id_vars=['id','year','month','element'], var_name='day', value_name='temp')

In [13]: print(weather_melt.head(n=10))
        id  year  month element day  temp
0  MX17004  2010      1    tmax  d1   NaN
1  MX17004  2010      1    tmin  d1   NaN
2  MX17004  2010      2    tmax  d1   NaN
3  MX17004  2010      2    tmin  d1   NaN
4  MX17004  2010      3    tmax  d1   NaN
5  MX17004  2010      3    tmin  d1   NaN
6  MX17004  2010      4    tmax  d1   NaN
7  MX17004  2010      4    tmin  d1   NaN
8  MX17004  2010      5    tmax  d1   NaN
9  MX17004  2010      5    tmin  d1   NaN

# pivot_Promouvoir la valeur de la colonne d'élément dans une colonne du tableau
In [14]: weather_tidy = weather_melt.pivot_table(index=['id','year','month','day'], columns='element', values='temp')

#J'ai pu promouvoir, mais l'indice n'est pas bon
In [15]: print(weather_tidy.head(n=10))
element                 tmax  tmin
id      year month day
MX17004 2010 1     d1    NaN   NaN
                   d2    NaN   NaN
                   d3    NaN   NaN
                   d4    NaN   NaN
                   d5    NaN   NaN
                   d6    NaN   NaN
                   d7    NaN   NaN
                   d8    NaN   NaN
             2     d1    NaN   NaN
                   d2   27.3  14.4

# reset_index()Puis ça devient beau
In [16]: weather_tidy_flat = weather_tidy.reset_index()

In [17]: print(weather_tidy_flat.head(n=10))
element       id  year  month day  tmax  tmin
0        MX17004  2010      1  d1   NaN   NaN
1        MX17004  2010      1  d2   NaN   NaN
2        MX17004  2010      1  d3   NaN   NaN
3        MX17004  2010      1  d4   NaN   NaN
4        MX17004  2010      1  d5   NaN   NaN
5        MX17004  2010      1  d6   NaN   NaN
6        MX17004  2010      1  d7   NaN   NaN
7        MX17004  2010      1  d8   NaN   NaN
8        MX17004  2010      2  d1   NaN   NaN
9        MX17004  2010      2  d2  27.3  14.4

4. Plusieurs types de blocs de construction d'observation sont stockés dans la même table

Multiple types of observational units are stored in the same table

[Exemple]

Ce qui suit est le résultat de la conversion du graphique de résultats du panneau d'affichage dans l'exemple 2 de «1. L'en-tête de colonne est une valeur, pas un nom de variable». Si vous regardez de plus près, ce jeu de données contient la «partie liée à la chanson» et la «partie liée au classement» dans le même tableau, et la «partie liée à la chanson» est répétée plusieurs fois. D'un point de vue «normalisation», il semble préférable de les scinder en deux ensembles de données plus tard. image

[Explication de la méthode]

Tout d'abord, suivez les étapes ci-dessous pour la "partie liée à la chanson".

--Créez un nouveau DataFrame en spécifiant uniquement les colonnes liées à la chanson -Supprimer les doublons avec drop_duplicates () --Générer une colonne ID pour une jointure ultérieure avec "partie de classement"

Suivez les étapes ci-dessous pour la "partie classement".

--JOIN le DataFrame créé ci-dessus et le dataframe d'origine pour générer une colonne ID.

[Exemple de conversion avec des pandas]

python3


#Confirmation des données
In [23]: print(billboard_long.head())
   year         artist                    track      time date.entered week  rank
0  2000          2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk1    87
1  2000        2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk1    91
2  2000   3 Doors Down               Kryptonite  03:53:00   2000-04-08  wk1    81
3  2000           98^0  Give Me Just One Nig...  03:24:00   2000-08-19  wk1    51
4  2000        A*Teens            Dancing Queen  03:44:00   2000-07-08  wk1    97

#Les données du même morceau sont répétées
In [24]: print(billboard_long[billboard_long.track =='Baby Don’t Cry'].head())
    year  artist           track      time date.entered week  rank
0   2000   2 Pac  Baby Don’t Cry  04:22:00   2000-02-26  wk1    87
8   2000   2 Pac  Baby Don’t Cry  04:22:00   2000-02-26  wk2    82
16  2000   2 Pac  Baby Don’t Cry  04:22:00   2000-02-26  wk3    72

#Créer un nouveau DataFrame dans "Song-related part" (la partie répétée se chevauche toujours)
In [25]: billboard_songs = billboard_long[['year','artist','track','time']]

In [26]: billboard_songs.head(n=10)
Out[26]:
   year           artist                    track      time
0  2000            2 Pac           Baby Don’t Cry  04:22:00
1  2000          2Ge+her  The Hardest Part Of ...  03:15:00
2  2000     3 Doors Down               Kryptonite  03:53:00
3  2000             98^0  Give Me Just One Nig...  03:24:00
4  2000          A*Teens            Dancing Queen  03:44:00
5  2000          Aaliyah            I Don’t Wanna  04:15:00
6  2000          Aaliyah                Try Again  04:03:00
7  2000  Adams, Yolanda             Open My Heart  05:30:00
8  2000            2 Pac           Baby Don’t Cry  04:22:00
9  2000          2Ge+her  The Hardest Part Of ...  03:15:00

#24 lignes x 4 colonnes
In [27]: billboard_songs.shape
Out[27]: (24, 4)

# drop_duplicates()Éliminez les doublons avec
In [28]: billboard_songs = billboard_songs.drop_duplicates()

#8 lignes x 4 colonnes
In [29]: billboard_songs.shape
Out[29]: (8, 4)

In [30]: print(billboard_songs.head())
   year         artist                    track      time
0  2000          2 Pac           Baby Don’t Cry  04:22:00
1  2000        2Ge+her  The Hardest Part Of ...  03:15:00
2  2000   3 Doors Down               Kryptonite  03:53:00
3  2000           98^0  Give Me Just One Nig...  03:24:00
4  2000        A*Teens            Dancing Queen  03:44:00

#Générer et ajouter des colonnes ID avec des numéros de série
In [31]: billboard_songs['id'] = range(len(billboard_songs))

#Achèvement des "parties liées aux chansons"
In [32]: print(billboard_songs.head())
   year         artist                    track      time  id
0  2000          2 Pac           Baby Don’t Cry  04:22:00   0
1  2000        2Ge+her  The Hardest Part Of ...  03:15:00   1
2  2000   3 Doors Down               Kryptonite  03:53:00   2
3  2000           98^0  Give Me Just One Nig...  03:24:00   3
4  2000        A*Teens            Dancing Queen  03:44:00   4

#A partir de là, la partie relative au "classement"
#Le DataFrame d'origine et le panneau d'affichage créés juste avant_REJOIGNEZ le DataFrame des chansons(merge)Pour créer un nouveau DataFrame
In [33]: billboard_ratings = billboard_long.merge(billboard_songs, on=['year','artist','track','time'])

#Colonne ID ajoutée
In [34]: billboard_ratings.head()
Out[34]:
   year    artist                    track      time date.entered week  rank  id
0  2000     2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk1    87   0
1  2000     2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk2    82   0
2  2000     2 Pac           Baby Don’t Cry  04:22:00   2000-02-26  wk3    72   0
3  2000   2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk1    91   1
4  2000   2Ge+her  The Hardest Part Of ...  03:15:00   2000-09-02  wk2    87   1

#Créer un nouveau DataFrame dans la "partie Classement"
In [35]: billboard_ratings = billboard_ratings[['id','date.entered','week','rank']]

#Achèvement de la "partie de classement"
In [36]: print(billboard_ratings.head(n=10))
   id date.entered week  rank
0   0   2000-02-26  wk1    87
1   0   2000-02-26  wk2    82
2   0   2000-02-26  wk3    72
3   1   2000-09-02  wk1    91
4   1   2000-09-02  wk2    87
5   1   2000-09-02  wk3    92
6   2   2000-04-08  wk1    81
7   2   2000-04-08  wk2    70
8   2   2000-04-08  wk3    68
9   3   2000-08-19  wk1    51

5. Les éléments constitutifs d'une observation sont stockés dans plusieurs tables

A single observational unit is stored in multiple tables

[Exemple]

Il n'est pas pratique pour l'analyse si les faits observés sont stockés séparément dans plusieurs ensembles de données. Comme indiqué ci-dessous, plusieurs ensembles de données avec la même disposition de colonne sont concaténés en un seul. image

[Explication de la méthode]

Ce cas est facile car il suffit de concaténer le jeu de données, mais si vous avez un grand nombre de jeux de données, il peut être difficile de le lire avec pd.read_xxx () un par un. Si vous utilisez glob, vous pouvez obtenir une liste de fichiers dont les noms remplissent les conditions spécifiées, alors comment l'utiliser pour concater Je vais vous présenter.

[Exemple de conversion avec des pandas]

python3


In [38]: import glob
#Liste des noms de fichiers qui correspondent aux critères
In [39]: concat_files = glob.glob('data/concat*')

In [40]: print(concat_files)
['data\\concat_1.csv', 'data\\concat_2.csv', 'data\\concat_3.csv']

In [41]: list_concat_df =[]
#Lisez le fichier csv pour chaque fichier et ajoutez-le à la liste des df
In [42]: for file in concat_files:
    ...:     df = pd.read_csv(file)
    ...:     list_concat_df.append(df)
    ...:
#J'ai une liste avec 3 DataFrames
In [43]: print(list_concat_df)
[    A   B   C   D
0  a0  b0  c0  d0
1  a1  b1  c1  d1
2  a2  b2  c2  d2
3  a3  b3  c3  d3,     A   B   C   D
0  a4  b4  c4  d4
1  a5  b5  c5  d5
2  a6  b6  c6  d6
3  a7  b7  c7  d7,      A    B    C    D
0   a8   b8   c8   d8
1   a9   b9   c9   d9
2  a10  b10  c10  d10
3  a11  b11  c11  d11]
#Ajouter 3 DataFrames en un et réindexer
In [44]: concat_df = pd.concat(list_concat_df, ignore_index=True)

In [45]: print(concat_df)
      A    B    C    D
0    a0   b0   c0   d0
1    a1   b1   c1   d1
2    a2   b2   c2   d2
3    a3   b3   c3   d3
4    a4   b4   c4   d4
5    a5   b5   c5   d5
6    a6   b6   c6   d6
7    a7   b7   c7   d7
8    a8   b8   c8   d8
9    a9   b9   c9   d9
10  a10  b10  c10  d10
11  a11  b11  c11  d11


Vous pouvez également écrire dans un style 1-Liner en utilisant la compréhension de liste comme indiqué ci-dessous.

python3


In [46]: concat_files = glob.glob('data/concat*')
#ici
In [47]: list_concat_df = [pd.read_csv(csv_file) for csv_file in concat_files]
#Après cela, le même que l'exemple précédent
In [48]: print(list_concat_df)
[    A   B   C   D
0  a0  b0  c0  d0
1  a1  b1  c1  d1
2  a2  b2  c2  d2
3  a3  b3  c3  d3,     A   B   C   D
0  a4  b4  c4  d4
1  a5  b5  c5  d5
2  a6  b6  c6  d6
3  a7  b7  c7  d7,      A    B    C    D
0   a8   b8   c8   d8
1   a9   b9   c9   d9
2  a10  b10  c10  d10
3  a11  b11  c11  d11]

In [49]: concat_df = pd.concat(list_concat_df, ignore_index=True)

In [50]: print(concat_df)
      A    B    C    D
0    a0   b0   c0   d0
1    a1   b1   c1   d1
2    a2   b2   c2   d2
3    a3   b3   c3   d3
4    a4   b4   c4   d4
5    a5   b5   c5   d5
6    a6   b6   c6   d6
7    a7   b7   c7   d7
8    a8   b8   c8   d8
9    a9   b9   c9   d9
10  a10  b10  c10  d10
11  a11  b11  c11  d11

c'est tout. Il y a beaucoup d'informations semblables à des astuces (How) de melt () et pivot_table () de pandas sur le net, et ce fut une expérience d'apprentissage, mais des concepts / méthodologies (pourquoi et quoi) comme les articles de Tidy Data. J'ai réalisé qu'il est puissant lorsqu'il est combiné avec l'arrière-plan de.

Pour ton information

Nous avons téléchargé le contenu de cet article sous forme de bloc-notes Jupyter sur github afin que vous puissiez bouger vos mains et en faire l'expérience. Étant donné que les données sont également jointes, elles fonctionnent telles quelles. Si vous êtes intéressé, veuillez le télécharger et l'essayer. ishida330/tidy-data-in-pandas

Recommended Posts

Essayez de convertir en données ordonnées avec les pandas
Essayez d'agréger les données de musique doujin avec des pandas
Essayez rapidement de visualiser votre ensemble de données avec des pandas
Convertir 202003 en 2020-03 avec les pandas
Visualisation des données avec les pandas
Manipulation des données avec les Pandas!
Mélangez les données avec les pandas
Essayez de défier le sol par récursif
Comment convertir des données détenues horizontalement en données détenues verticalement avec des pandas
Conseils de traitement des données avec Pandas
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Ingéniosité pour gérer les données avec Pandas de manière à économiser la mémoire
Essayez d'extraire la table de données d'Azure SQL Server avec pyodbc
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (Append)
Essayez d'acquérir des données lors de la redirection de port vers RDS avec anaconda.
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (encodage)
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (conversion)
Essayez d'extraire les caractéristiques des données de capteur avec CNN
Essayez d'exploiter Facebook avec Python
Comment gérer les données déséquilibrées
Traçage de données polyvalent avec pandas + matplotlib
Essayez de mettre des données dans MongoDB
Essayez de convertir la CLI cloudmonkey en python3 -1
Comment augmenter les données avec PyTorch
Je veux faire ○○ avec les Pandas
Essayez de produire de l'audio avec M5 STACK
Essayez les données en parallèle avec TensorFlow distribué
[Analyse du cours de l'action] Apprenez les pandas avec la moyenne Nikkei (004: Changer les données lues en moyenne Nikkei)
[Pandas] J'ai essayé d'analyser les données de ventes avec Python [Pour les débutants]
Essayez de résoudre l'itinéraire le plus court avec les données sociales Python + NetworkX +
Essayez d'obtenir des métriques CloudWatch avec la source de données python re: dash
Essayez de traiter les données Titanic avec la bibliothèque de prétraitement DataLiner (Drop)
Essayez de reproduire un film couleur avec Python
Essayez de travailler avec des données binaires en Python
Convertir des données Excel en JSON avec python
Convertir les données de la grille en données contenant des lignes (?) À l'aide de pandas
Envoyer des données à l'API DRF avec Vue.js
Convertissez des données FX 1 minute en données 5 minutes avec Python
Essayez de prédire les fleurs de cerisier avec XG Boost
Premier YDK à essayer avec Cisco IOS-XE
Essayez de générer une image avec aliénation
Comment lire les données de problème avec Paiza
Gérez les structures de données 3D avec les pandas
Exemple de traitement efficace des données avec PANDAS
Meilleures pratiques pour manipuler les données avec les pandas
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
Essayez de créer votre propre AWS-SDK avec bash
Comment créer des exemples de données CSV avec hypothèse
Essayez de résoudre le problème du fizzbuzz avec Keras
Essayez d'utiliser django-import-export pour ajouter des données csv à django
Convertissez les données avec la forme (nombre de données, 1) en (nombre de données,) avec numpy.
Extrayez la table de données d'Azure SQL Server avec pyodbc et essayez de la rendre numpy array / pandas dataframe
Lire les données csv Python avec Pandas ⇒ Graphique avec Matplotlib
J'ai essayé de sauvegarder les données avec discorde
Essayez de résoudre le diagramme homme-machine avec Python
Essayez d'extraire le document Azure document DB avec pydocumentdb
Essayez de dessiner une courbe de vie avec python
Je veux frapper 100 sciences des données avec Colaboratory
Convertissez l'historique d'utilisation de Suica mobile au format PDF au format pandas Data Frame avec tabula-py
Essayez de communiquer avec EV3 et PC! (MQTT)
Enregistrez les données pour flasher avec la carte Nucleo STM32