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.
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.
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.
[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 **.
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.
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.
Column headers are values, not variable names
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.
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)
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
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.
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.
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
Multiple variables are stored in one column
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».
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
Variables are stored in both rows and columns
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.
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
Multiple types of observational units are stored in the same table
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.
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.
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
A single observational unit is stored in multiple tables
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.
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.
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.
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