Hallo! Plötzlich tut es mir leid, aber haben Sie jemals das Wort "** Tidy Data " gehört (auf Japanisch übersetzt als " ordentliche Daten **")? Ich habe kürzlich Pandas in einem Kurs namens Pandas-Datenanalyse mit Python-Grundlagen in Safari Books Online studiert. Als ich das tat, erschien am Ende das Kapitel "Ordentliche Daten" und ich kannte diese Geschichte. Was ist "Tidy Data"? Tidy Data Von Hadley Wickham (der in der Welt von R als Gott verehrt wird). Es ist ein Konzept, das in dem Papier (2014) mit dem Namen html vorgeschlagen wurde. Das Papier hat auch eine japanische Übersetzung, die zu Beginn der Übersetzung wie folgt eingeführt wird.
Eine vollständige Übersetzung des Papiers „Tidy Data“, in dem das Konzept der „geordneten Daten“ für eine effektive Datenanalyse befürwortet wurde. Ordentliche Daten sind ein nützliches Konzept, das die Datenanalyse mit R und dergleichen erleichtert.
Tidy Data ist ein Konzept und eine Methode zum Bereinigen / Organisieren von Daten, die "80% der Arbeit eines Analysten ausmachen", so einfach und effektiv wie möglich. Das Papier wurde unter Berücksichtigung von R aus dem Hintergrund des Autors geschrieben, aber der oben erwähnte Safari Online-Kurs zeigte, wie diese Datenbereinigungsmuster in Python / Pandas implementiert werden. Ich schämte mich zu sagen, dass ich nie eine ordnungsgemäße Organisation von Datenorganisationsmethoden und -methoden in der Datenanalyse gelesen hatte, daher war es sehr inspirierend, diesen Artikel zu schreiben.
: triangular_flag_on_post: (2019/3/2) Dieser Artikel wurde im April 2017 veröffentlicht, aber Daniel Y. Chens Pandas-Buch "Pandas for Everyone" war Dozent im ursprünglichen Story-Videokurs dieses Artikels "[Grundlegende Codierung für Python-Datenanalyse / maschinelles Lernen! Einführung in die Verwendung der Pandas-Bibliothek](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 = Bücher & dh = UTF8 & qid = 1551490253 & sr = 1-3 & keywords = pandas) 2019/2 / Übersetzt und veröffentlicht am 22. Es gibt auch eine geordnete Erklärung der Daten, daher werde ich sie vorstellen.
Der Autor der Website Colourless Green Ideas erklärt die Übersetzung des Papiers und die Idee von "geordneten Daten" auf Japanisch auf sehr leicht verständliche Weise.
Weitere Informationen finden Sie im Artikel "Was sind geordnete Daten" aus meiner amateurhaften Erklärung. Es ist am besten, es zu haben, aber für diejenigen, die beschäftigt sind (obwohl es sehr rau ist), werde ich es unten zusammenfassen.
[Einleitung (Atarimaes Geschichte)]: triangular_flag_on_post: (Oktober 2019) Das Erklärungsbeispiel wurde geändert [^ 1]
[^ 1]: (2019/10) Ursprünglich wurde dieser Ort als Beispiel für Größe und Gewicht der Körpermaße beschrieben, aber @acevif bemerkte, dass dies als Beispiel unangemessen ist, und ich denke, dass dies sicherlich der Fall ist. Also habe ich das Beispiel geändert. Weitere Informationen finden Sie im Kommentarbereich.
Das Folgende ist eine Liste von "Behandlungen, die an Patienten in medizinischen Einrichtungen durchgeführt werden, und den daraus resultierenden Werten". Wenn Sie das Ergebnis jeder Behandlung für jede Person wissen möchten, können Sie es in Richtung der Linie sehen. Die Ergebnisse jeder Person sind in der Zeilenrichtung angeordnet, die als "** Beobachtung " bezeichnet wird. Außerdem sind die Arten der durchgeführten Behandlungen in Reihenrichtung angeordnet. Diese werden als " Variablen **" bezeichnet. Dies ist eine Form, die für den Menschen leicht zu verstehen ist.
Bedeutung und Struktur der Daten Unter der Annahme, dass es eine Datengruppe (beobachteter Wert) gibt, dass "der numerische Wert des Ergebnisses der Anwendung einer bestimmten Behandlung auf jeden Patienten so war", lautet dies, wenn es tatsächlich als Datensatz ausgedrückt wird, wie folgt. Kann durch verschiedene ** Strukturen ** dargestellt werden.
In der oben gezeigten Struktur: eins: enthält zwei Beobachtungen pro Zeile und: zwei: enthält drei Beobachtungen pro Zeile, ganz rechts: drei: enthält nur eine Beobachtung pro Zeile ( "Als Ergebnis der an Herrn C durchgeführten Aktion X betrug der Wert 3"). Mit anderen Worten, die Form von: drei: ist ** die "Semantik" und "Struktur" der Datenübereinstimmung **. Dies ist der wichtige Punkt "geordneter Daten". In dem Artikel "Bestellte Daten" wird argumentiert, dass "dieses Formular bei der Datenanalyse einfacher zu handhaben ist (abgesehen davon, dass es für Menschen leicht zu verstehen ist)". (Warum dies einfacher zu handhaben ist, finden Sie unter "Struktur und" im Artikel "Was sind geordnete Daten". Siehe Abschnitt "Bedeutung übereinstimmender Bedeutungen")
[Mit anderen Worten, was sind "geordnete Daten"? ]] Um es extrem grob zu sagen
――Es ist einfacher, die zu analysierenden Daten zu verarbeiten, wenn die Daten analysiert werden (z. B. Aggregation oder Plotten), indem die Daten so organisiert und konvertiert werden, dass Bedeutung und Struktur übereinstimmen. ――Es ist besser, die zu analysierenden Daten richtig zu normalisieren ~
Ich denke, das bedeutet es.
Listen Sie im Kapitel "Anordnung überfüllter Datensätze" im Dokument "Ordentliche Daten" fünf "allgemeine Muster überfüllter Daten (unordentliche Daten)" auf und geben Sie die Richtung jeder Datenorganisation an. Ich bin. Im Folgenden werden in diesem Artikel Beispiele vorgestellt, wie man sie tatsächlich mit Pandas organisiert.
―― Natürlich gibt es viele andere Möglichkeiten, es auf Codeebene zu implementieren, daher ist dies nur ein Beispiel. ――Für die Titelzeile habe ich den Ausdruck in der oben erwähnten japanischen Übersetzung verwendet.
Column headers are values, not variable names
Das Folgende ist eine Zählung der Anzahl der Personen nach "Religion" und "Einkommensgruppe" in einer bestimmten Umfrage. In der Tabelle links wird "Einkommensklasse" durch die horizontale Achse dargestellt, aber es ist nicht gut, dass die Spaltenüberschriften selbst, wie "10.000 USD oder weniger" und "10-20.000 USD", Werte enthalten. Konvertieren Sie dies in die Form von "geordneten Daten" auf der rechten Seite.
Diese Konvertierung kann einfach mit Pandas Schmelze durchgeführt werden.
--id_vars = Gibt die Spalte der Basisachse an ("Religion" im obigen Beispiel). --var_name = Geben Sie der Spalte einen Namen, die eine Variable sein soll ("Bereich" im obigen Beispiel). --value_name = Benennen Sie die Spalte, die der Wert sein soll ("count" im obigen Beispiel)
python3
In [1]: import pandas as pd
#Daten lesen
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
#Schmelze laufen lassen
In [4]: df_long = pd.melt(df ,id_vars='religion', var_name='range', value_name='count')
# tidy-In Datenformat konvertiert
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
Unten finden Sie einen Datensatz mit Plakat-Hit-Charts. Es enthält die Ranglistendaten der ersten Woche, der zweiten Woche usw. der Woche, die in der Tabelle aufgeführt sind, sowie Daten wie Jahr, Songtitel, Künstler usw.
Dies wird auch in "geordnete Daten" umgewandelt. Sie können Schmelze wie in Beispiel 1 verwenden, in diesem Beispiel gibt es jedoch mehrere Achsenspalten. Geben Sie in der Liste die Spalte wie id_vars = ['Jahr', 'Künstler', 'Titel', 'Uhrzeit', 'Datum eingegeben] an. Der Rest ist der gleiche wie in Beispiel 1.
python3
#Daten lesen
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
#Schmelze laufen lassen(id_Vars geben in Liste)
In [17]: billboard_long = pd.melt(billboard, id_vars=['year','artist','track','time','date.entered'], var_name='week', value_name
...: ='rank')
# tidy-In Datenformat konvertiert
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
Dies sind Daten zur Tuberkulose (TB) und zeigen die Anzahl der Tuberkulose-Patienten nach "Geschlecht" und "Altersgruppe" zusätzlich zu "Land" und "Jahr". m014 bedeutet männlich (m) 0-14 Jahre alt, m1524 bedeutet männlich (m) 15-24 Jahre alt. Wenn zwei Variablen, "Geschlecht" und "Altersgruppe", auf diese Weise in einer Spalte gespeichert werden, ist es nicht gut, wenn Sie aus der Perspektive von "Geschlecht", "Altersgruppe" usw. analysieren möchten. Daher sollte die Spalte "Geschlecht" sein. Und "Altersgruppe".
python3
#Daten lesen
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
#Schmelze laufen lassen
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
#Extrahieren Sie das erste Zeichen der Variablenspalte und fügen Sie die Spalte "Geschlecht" hinzu.
In [6]: tb_long['gender'] = tb_long.variable.str[0]
#Extrahieren Sie das zweite und die nachfolgenden Zeichen der variablen Spalte und fügen Sie die Spalte "Alter" hinzu.
In [7]: tb_long['age'] = tb_long.variable.str[1:]
#Spalten für Geschlecht und Alter wurden hinzugefügt
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
Dies sind die täglichen meteorologischen Daten einer Wetterstation in Mexiko (MX17004). Der erste Tag (d1), der zweite Tag (d2) und der Tag sind auf der horizontalen Achse in Bezug auf die Achsen "Jahr" und "Monat" ausgerichtet, aber in der Elementspalte sind die maximalen und minimalen Temperaturen des Tages 2 Ich habe eine als Linie. Es ist nicht gut, dass die beobachteten Fakten sowohl in Zeilen als auch in Spalten gespeichert sind. Ordnen Sie sie daher in der Form rechts an.
python3
#Daten lesen
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
#Schmelze laufen lassen
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_Heraufstufen des Werts der Elementspalte in eine Spalte in der Tabelle
In [14]: weather_tidy = weather_melt.pivot_table(index=['id','year','month','day'], columns='element', values='temp')
#Ich konnte promoten, aber der Index ist nicht gut
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()Dann wird es schön
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
Das folgende ist das Konvertierungsergebnis des Plakat-Treffer-Diagramms in Beispiel 2 von "1. Die Spaltenüberschrift ist ein Wert, kein Variablenname". Wenn Sie genau hinschauen, enthält dieser Datensatz den "Song-bezogenen Teil" und den "Ranking-bezogenen Teil" in derselben Tabelle, und der "Song-bezogene Teil" wird viele Male wiederholt. Unter dem Gesichtspunkt der "Normalisierung" scheint es besser, diese später in zwei Datensätze aufzuteilen.
Befolgen Sie zunächst die folgenden Schritte für den "Song-bezogenen Teil".
--Erstellen Sie einen neuen DataFrame, indem Sie nur die Spalten angeben, die sich auf den Song beziehen
Befolgen Sie die nachstehenden Schritte für den "Ranking-Teil".
python3
#Bestätigung der Daten
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
#Die Daten desselben Songs werden wiederholt
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
#Erstellen Sie einen neuen DataFrame im "Song-bezogenen Teil" (wiederholter Teil überlappt sich immer noch)
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 Zeilen x 4 Spalten
In [27]: billboard_songs.shape
Out[27]: (24, 4)
# drop_duplicates()Beseitigen Sie Doppelarbeit mit
In [28]: billboard_songs = billboard_songs.drop_duplicates()
#8 Zeilen x 4 Spalten
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
#Generieren und Hinzufügen von ID-Spalten mit Seriennummern
In [31]: billboard_songs['id'] = range(len(billboard_songs))
#Fertigstellung von "Teilen im Zusammenhang mit Liedern"
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
#Von hier an bezog sich der Teil auf "Ranking"
#Der ursprüngliche DataFrame und die Werbetafel wurden kurz zuvor erstellt_Treten Sie dem DataFrame von Songs bei(merge)So erstellen Sie einen neuen DataFrame
In [33]: billboard_ratings = billboard_long.merge(billboard_songs, on=['year','artist','track','time'])
#ID-Spalte hinzugefügt
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
#Erstellen Sie einen neuen DataFrame im "Ranking-Teil".
In [35]: billboard_ratings = billboard_ratings[['id','date.entered','week','rank']]
#Abschluss des "Ranking-Teils"
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
Für die Analyse ist es unpraktisch, wenn die beobachteten Fakten separat in mehreren Datensätzen gespeichert werden. Wie unten gezeigt, werden mehrere Datensätze mit demselben Spaltenlayout zu einem verkettet.
Dieser Fall ist einfach, da Sie nur den Datensatz zusammenfassen müssen. Wenn Sie jedoch über eine große Anzahl von Datensätzen verfügen, ist es schwierig, jeden mit pd.read_xxx () zu lesen. Wenn Sie glob verwenden, können Sie eine Liste von Dateien mit Namen abrufen, die die angegebenen Bedingungen erfüllen Ich werde dich vorstellen.
python3
In [38]: import glob
#Liste der Dateinamen, die den Kriterien entsprechen
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 =[]
#Lesen Sie die CSV-Datei für jede Datei und fügen Sie sie der Liste von df hinzu
In [42]: for file in concat_files:
...: df = pd.read_csv(file)
...: list_concat_df.append(df)
...:
#Ich habe eine Liste mit 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]
#Fügen Sie 3 DataFrames zu einem hinzu und indizieren Sie sie neu
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
Sie können auch in einem 1-Liner-Stil schreiben, indem Sie das unten gezeigte Listenverständnis verwenden.
python3
In [46]: concat_files = glob.glob('data/concat*')
#Hier
In [47]: list_concat_df = [pd.read_csv(csv_file) for csv_file in concat_files]
#Danach das gleiche wie im vorherigen Beispiel
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
das ist alles. Es gibt viele tippähnliche Informationen (Wie) über Schmelze () und pivot_table () von Pandas im Netz, und es war eine Lernerfahrung, aber Konzepte / Methoden (Warum und Was) wie die Artikel von Tidy Data. Ich erkannte, dass es mächtig ist, wenn es mit dem Hintergrund von kombiniert wird.
Wir haben den Inhalt dieses Artikels als Jupyter-Notizbuch auf Github hochgeladen, damit Sie Ihre Hände bewegen und ihn erleben können. Da die Daten auch angehängt sind, funktionieren sie so wie sie sind. Wenn Sie interessiert sind, laden Sie es bitte herunter und probieren Sie es aus. ishida330/tidy-data-in-pandas