Pandas Das Schweizer Taschenmesser für deine Daten, Teil 1

Pandas ist ein erstaunliches Datenanalyse-Toolkit für Python. Es ist für die Verarbeitung relationaler oder beschrifteter Daten konzipiert und bietet Ihnen Werkzeuge zum Schneiden und Würfeln nach Belieben. 

In diesem zweiteiligen Lernprogramm lernen Sie die grundlegenden Datenstrukturen von Pandas kennen: die Serie und den Datenrahmen. Sie erfahren auch, wie Sie Daten auswählen, mit fehlenden Werten umgehen, Ihre Daten bearbeiten, Daten zusammenführen, gruppieren, mit Zeitreihen arbeiten und sogar Daten zeichnen.

Installation

Um zu installieren, einfach Pip installieren Pandas. Es wird auch darauf geachtet, dass Sie numpy installieren, wenn Sie es nicht installiert haben.

Serie

Pandas-Serien werden als 1-D-Arrays typisiert und beschriftet. Dies bedeutet, dass auf jedes Element zusätzlich zu seinem Index über seine Beschriftung zugegriffen werden kann.

Hier ist eine Reihe von Ganzzahlen, bei denen die Beschriftungen römische Ziffern sind. Sie können mithilfe der Beschriftungen oder Ganzzahlindizes indizieren und schneiden. Im Gegensatz zum regulären Schneiden von Python-Listen wird bei Verwendung von Labels das letzte Element eingeschlossen!

>>> s = pd.Serie (np.arange (1,5), ['I', 'II', 'III', 'IV', 'V']) >>> s ['III'] 3 >>> s [0] 1 >>> s ['II': 'V'] II 2 III 3 IV 4 V 5 >>> s [1: 5] II 2 III 3 IV 4 V 5 

Wenn Sie keinen Index angeben, wird automatisch ein 0-basierter Integer-Index erstellt:

>>> s = pd.Serie ((50, 7, 88, 9)) >>> s 0 50 1 7 2 88 3 9

Nun, hier ist ein kleines Geheimnis für dich. Pandas-Serien sind ein Wrapper um Numpys Arrays.

>>> s.values-Array ([50, 7, 88, 9]) >>> Typ (s.values)  

Im Gegensatz zu Python-Listen oder numpy-Arrays werden Operationen für Serien im Index ausgerichtet. Wenn die Indizes nicht übereinstimmen, wird die Vereinigung der Indizes mit fehlenden Werten verwendet. Hier einige Beispiele, in denen Diktate als Daten verwendet werden, damit die Schlüssel zum Serienindex werden:

>>> s1 = pd.Series (dict (a = 1, b = 2, c = 3)) >>> s2 = pd.Series (dict (a = 4, b = 5, c = 6, d = 7) )) >>> s1 + s2 a 5.0 b 7.0 c 9.0 d NaN >>> s1 [1:] * s2 [: - 1] a NaN b 10.0 c 18.0

Datenrahmen

Datenrahmen sind die primäre Datenstruktur der Pandas. Sie repräsentieren Datentabellen, bei denen jede Spalte eine Reihe ist. Datenrahmen haben auch einen Index, der als Zeilenbeschriftung dient. Ein Datenrahmen hat auch Spaltenbeschriftungen. So deklarieren Sie einen Datenrahmen mithilfe eines Diktats. 

>>> df = pd.DataFrame (dikt (a = [1, 2, 3]), b = [4,5,6], c = pd.Timestamp ('20170902'), d = pd.Categorical ([' rot ',' grün ',' blau ']))) >>> df abcd 0 1 4 2017-09-02 rot 1 2 5 2017-09-02 grün 2 3 6 2017-09-02 blau

Beachten Sie, dass ein Integer-Index (Zeilenbeschriftung) automatisch erstellt wurde. Sie können natürlich Ihren eigenen Index angeben:

>>> df.index = ('I II III'.split ()) >>> df a b c d I 1 4 2017-09-02 rot II 2 5 2017-09-02 grün III 3 6 2017-09-02 blau

Daten importieren und exportieren

Datenrahmen können aus den unterschiedlichsten Quellen erstellt werden:

  • Diktier von 1-D-Narrays, Listen, Diktaten oder Serien
  • 2-D numpy.array
  • strukturiert oder Record ndarray
  • ein anderer DataFrame

Sie können auch Daten aus vielen Dateiformaten und Datenbanken importieren oder laden, z.

  • CSV
  • Excel
  • HTML
  • HDFStore 
  • SQL

So lesen Sie eine CSV-Datei:

data.csv -------- I, 1,4,2017-09-02, Rot II, 2,5,2017-09-02, Grün III, 3,6,2017-09-02, Blau >>> pd.read_csv ('data.csv') I 1 4 2017-09-02 rot 0 II 2 5 2017-09-02 grün 1 III 3 6 2017-09-02 blau 

Hier ist die vollständige Liste von read_functions ():

>>> read_functions = [a für a in dir (pd) wenn a.startswith ('read_')] >>> print ('\ n'.join (read_functions)) read_clipboard read_csv read_excel read_fwf read_fwf read_gbq read_hdf read_hml read_jml read_jhp read_mslip_pdf read_hml read_sas read_sql read_sql_query read_sql_table read_stata read_table 

Für das Datenrahmenobjekt selbst gibt es entsprechende Methoden, um die Daten in viele Formate und Datenbanken zu exportieren. So exportieren Sie nach Json und msgpack:

>>> df.to_json () '"a": "I": 1, "II": 2, "III": 3, "b": "I": 4, "II": 5 , "III": 6, c: I: 1504310400000, II: 1504310400000, III: 1504310400000, d: I:: Rot, II:: grün "," III ":" blau " '>>> df.to_msgpack () b' \ x84 \ xa3typ \ xadblock_manager \ xa5klass \ xa9DataFrame \ xa4axes \ x92 \ xa3typ \ xa5index \ xa5klass \ xa5Index \ xa5name \ \ xa \ xa \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa6 \ xa \ xa \ xa \ \ \ xa \ \ \ xa \ xa \ \ \ xa \ \ \ xa4 \ \ \ xa5 \ \ \ xa5 \ \ \ xa5 \ \ \ xa5 \ \ \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa4 \ xa5 \ xa5 \ xa5 \ xa4 \ xa5 \ xa5 \ xa5 \ xa5 \ xa6 \ xa5 \ xa4 \ xa5 \ xa5 \ xa5 \ xa4 \ xa5 \ xa4 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ xa5 \ x86 xa8compress \ xc0 \ xa6blocks \ x93 \ x86 \ xa4locs \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ xa2 \ x02 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ xdx4 \ x00 xxx x00 \ x00 \ x01 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8komprimieren \ xc0 \ xa6values ​​\ xc70 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x04 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa5shape \ x92 \ x02 \ x03 \ xa5d64 \ xa5int64 \ xa5klass \ xa8IntBlock \ xa8comByXoXoXoXo/ s \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x01 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ XD7 \ x00 \ x02 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ XC0 \ xa6values ​​\ xc7 \ x18 \ x00 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ x00 \ x00 \ x00 \ xed \ xafVb \ xe0 \ x14 \ xa5 \ x03 \ xa5dtype \ xaedatetime64 [ns] \ xa5klass \ xadDatetimeBlock \ xa8compress \ XC0 \ x86 \ xa4locs \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ x91 \ x01 \ xa4ndim \ x01 \ xa5dtype \ xa5int64 \ xa4data \ XD7 \ x00 \ x03 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ xa8compress \ xc0 \ xa6values ​​\ x87 \ xa3typ \ xa8category \ xa5klass \ xabCategorical \ xa0x \ \ xa0codes \ x86 \ xa3typ \ xa7ndarray \ xa5shape \ xa5shape \ xa4inta \ xa4data \ xc7 \ x03 \ x00 \ x02 \ x01 \ x00 \ xa8compress \ xc0 \ xaacategories \ x86 \ xa3typ \ xa5index \ xa5index \ xa5Index \ xa4name \ xc5 \ xa5data \ xa5d04 \ xa8compress \ xc0 \ xa7ordered \ xc2 \ xa8compress \ xc0 \ xa5shape \ x91 \ x03 \ xa5dtype \ xa8category \ xa5klass \ xb0CategoricalBlock \ xa8compress \ xc0 '

Metadaten und Statistiken

Pandas enthält viele Informationen zu Datenrahmen. Schauen Sie sich diese Methoden an:

>>> df.index Index (['I', 'II', 'III'], dtype = "object") >>> df.columns Index (['a', 'b', 'c', ' d '], dtype = "object") >>> df.describe () ab count 3,0 3,0 mean 2,0 5,0 std 1,0 1,0 min 1,0 4,0 25% 1,5 4,5 50% 2,0 5,0 75% 2,5 5,5 max 3,0 6.

Daten auswählen

Mit Datenrahmen können Sie Daten auswählen. Wenn Sie eine Zeile nach Index auswählen möchten, müssen Sie das verwenden loc Attribut. Um Spalten auszuwählen, verwenden Sie einfach den Spaltennamen. So wählen Sie einzelne Zeilen, einzelne Spalten, eine Reihe von Zeilen, eine Reihe von Spalten und nicht zuletzt einen rechteckigen Abschnitt (Teilmenge der Zeilen und Teilmenge der Spalten dieser Zeilen) aus:

Einzelne Zeile ---------- >>> df.loc ['II'] a 2 b 5 c 2017-09-02 00:00:00 d grün Mehrere Zeilen mit ganzzahligem Index (kein 'loc') ) ------------------------------------------ >>> df [ : 2] abcd I 1 4 2017-09-02 rot II 2 5 2017-09-02 grün Einzelspalte ------------- >>> df ['b'] I 4 II 5 III 6 Mehrere Spalten ---------------- >>> df.loc [:, 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09 -02 III 6 2017-09-02 Rechteckschnitt ------------------- >>> df.loc [: 'II', 'b': 'c'] bc I 4 2017-09-02 II 5 2017-09-02 Verwenden des ganzzahligen Index (wenn der tatsächliche Index nicht ganzzahlig ist) ------------------------ ------------------------------ >>> df.iloc [: 2, 1: 3] bc I 4 2017-09 -02 II 5 2017-09-02 

Zusätzlich zu diesen direkten Adressierungsdaten können Sie auch basierend auf Werten auswählen. In Spalte b können Sie beispielsweise nur Zeilen mit geraden Werten auswählen: 

>>> df [df.b% 2 == 0] a b c d I 1 4 2017-09-02 rot III 3 6 2017-09-02 blau

Daten sortieren

Pandas gibt Ihnen auch die Sortierung. Lassen Sie uns den folgenden Datenrahmen nach Index (Zeilen) und nach Spalte sortieren. Die Indizierung auf mehreren Ebenen wird ebenfalls unterstützt:

index = ['eins', 'zwei', 'drei', 'vier', 'fünf'] df = pd.DataFrame (np.random.randn (5,2), index = index, Spalten = ['a' , 'b']) Nach Index sortieren (alphabetisch und absteigend) ------------------------------------ --------- >>> df.sort_index (aufsteigend = False) ab zwei -0.689523 1.411403 drei 0.332707 0.307561 eins -0.042172 0.374922 vier 0.426519 -0.425181 fünf -0.161095 -0.849932 Sortieren nach Spalte ------ -------- >>> df.sort_values ​​(by = 'a') ab zwei -0,689523 1,411403 fünf -0,161095 -0,849932 eins -0,042172 0,374922 drei 0,332707 0,307561 vier 0,426519 -0,425181

Fazit

In diesem Teil des Tutorials haben wir die grundlegenden Datentypen von Pandas behandelt: die Serie und den Datenrahmen. Wir importierten und exportierten Daten, wählten Teilmengen von Daten aus, arbeiteten mit Metadaten und sortierten die Daten. In Teil zwei werden wir unsere Reise fortsetzen und uns mit fehlenden Daten, Datenmanipulation, Datenzusammenführung, Datengruppierung, Zeitreihen und Plotten befassen. Bleib dran.

Zögern Sie nicht, zu sehen, was wir für den Verkauf und das Lernen auf dem Markt zur Verfügung haben, und zögern Sie nicht, Fragen zu stellen und mit dem untenstehenden Feed wertvolles Feedback zu geben.