[PYTHON] Eine Einführung in Pandas, um zu lernen, während man leidet [Teil 1]

Einführung

Pandas ist eine unvermeidliche Bibliothek für die Datenanalyse in Python. Dieser Pandas hat jedoch eine sehr hohe Hürde für Anfänger ... Ich hatte auch große Probleme, deshalb werde ich versuchen, es aus den Grundlagen zusammenzusetzen. Ich bin selbst kein fortgeschrittener Pandas, daher würde ich mich über Ihre Kommentare und Ratschläge freuen. Darüber hinaus besteht dieser Artikel aus drei Teilen. (Da es geplant ist, besteht eine große Wahrscheinlichkeit, dass es sich ändert ...)

Fangen wir an (* ^ ▽ ^ *)

Vorsichtsmaßnahmen

Bitte beachten Sie, dass das Importieren der folgenden Bibliotheken in zukünftigen Notationen weggelassen wird.

import pandas as pd
import numpy as np

Über Serien

Es gibt zwei Haupttypen von Pandas: Serien- und DataFrame-Klassen. Um den Unterschied kurz zu erklären, kann Series eindimensionale Daten (Vektor) und DataFrame zweidimensionale Daten (Matrix) verarbeiten. Lassen Sie uns zuerst die Serie überprüfen. pandas.Series

Serien erstellen (Wörterbuch angeben)

sr = pd.Series({'taro': 'kyoto', 'jiro': 'osaka', 'saburo': 'nara'})
print(sr.head())

img123.png

Im obigen Code entspricht der Attributname des Wörterbuchs der Zeilenbezeichnung (Index) der Serie, und der Wert des Wörterbuchs entspricht dem Wert der Serie.

Serie erstellen (Array angeben)

sr = pd.Series(['kyoto', 'osaka', 'nara'], index=['taro', 'jiro','saburo'] )
print(sr.head())

img123.png

Sie können die Zeilenbezeichnung (Index) wie oben festlegen. Wenn Sie die Zeilenbezeichnung nicht festlegen, tritt übrigens kein Fehler auf. Wenn Sie sie jedoch nicht explizit festlegen, wird die Zahl 0,1 automatisch festgelegt.

Die Serie hat immer noch viele Funktionen, aber wir werden sie weglassen, da der DataFrame viele Duplikate enthält. ** Beachten Sie jedoch, dass DataFrame und Series unterschiedlich verwendet werden, auch wenn sie denselben Attributnamen haben. ** ** ** (Ich denke, dies ist auch einer der Faktoren, die Pandas schwierig machen ...)

Informationen zu DataFrame

Apropos Pandas, es ist DataFrame. Werfen wir einen Blick auf die offizielle Referenz für DataFrame. pandas.DataFrame

Die folgenden drei sind wichtige Argumente für den Konstruktor von pandas.DataFrame.

Werfen wir einen Blick auf das eigentliche Programm.

DataFrame-Erstellung (Spalte)

Zunächst wird der Datarame mithilfe von Spaltendaten erstellt. Der Attributname des Wörterbuchs wird als Spaltenbezeichnung verwendet, und der Wert (als Array registriert) wird als Zeile (Index) behandelt. (* Ein Fehler tritt auf, wenn die Werte nicht in einem Array angeordnet sind.) ↑ Wenn Sie den Index richtig einstellen, wird anscheinend kein Fehler angezeigt, auch wenn es sich nicht um ein Array handelt. (Es ist kompliziert ...)

data = {
  'name': ['taro', 'jiro', 'saburo'],
  'address': ['kyoto', 'osaka', 'nara'],
  'birth': ['2020-01-01T12:00:00', '2020-02-11T12:00:00', '2020-03-22T12:00:00']
}
df = pd.DataFrame(data = data)
print(df.head())

img123.png

DataFrame-Erstellung (Zeile)

Erstellen Sie als Nächstes einen Datenrahmen mit den Zeilendaten. Ohne Spalten tritt kein Fehler auf. In diesem Fall werden Spalten automatisch mit Zahlen wie 0,1 gekennzeichnet.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, columns = ['name', 'address', 'birth'])
print(df.head())

img123.png

Übrigens, wenn Sie sowohl die Zeilenbezeichnung (Index) als auch die Spaltenbezeichnung (Spalten) festlegen möchten, gehen Sie wie folgt vor. Legen Sie sowohl den Index als auch die Spalten fest.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df.head())

img123.png

Spalten aus DataFrame extrahieren

Ich denke, es gibt viele Möglichkeiten, bestimmte Spaltendaten aus den Daten zu extrahieren. In diesem Fall ist es flexibler, loc zu verwenden, was später beschrieben wird. Es ist jedoch auch möglich, die Spalten einzugrenzen, indem Sie sie direkt im Datenrahmen angeben. ** Sie müssen sich diese Methode zunächst nicht merken, da loc, das später beschrieben wird, komplexer ist (es ist verwirrend) **

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, columns = ['name', 'address', 'birth'])
print(df['name'])

img123.png

Der obige Code extrahiert die Spalte "Name". Sie werden feststellen, dass sich die tabellenartige Anzeige geändert hat. Dies liegt daran, dass das Ergebnis des Extrahierens der Spalten "Serie" und nicht "Datenrahmen" ist.

Wenn Sie mehrere Spalten extrahieren möchten, gehen Sie wie folgt vor.

df[['name', 'address']]

img123.png

Wenn Sie mehrere Spalten extrahieren, ist das extrahierte Ergebnis ein Datenrahmen anstelle einer Reihe.

Zeilen aus Dataframe extrahieren

Es ist möglich, sowohl Zeilen als auch Spalten zu extrahieren. Verwenden Sie Scheiben zum Extrahieren. ** Sie müssen sich diese Methode zunächst nicht merken, da loc, das später beschrieben wird, komplexer ist (es ist verwirrend) **

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df['a':'b'])

img123.png

Oben werden die Zeile "a" und die Zeile "b" extrahiert. ** Im Gegensatz zu Spalten können nicht mehrere Zeilen einzeln ausgewählt und extrahiert werden. ** ** ** (Sie können beispielsweise die Zeilen a und c nicht extrahieren.) Wenn Sie nur Zeile a auswählen möchten, müssen Sie diese in Slices angeben. (Zum Beispiel kann print (df ['a': 'a']) nur Zeile a extrahieren.)

Informationen zu Dataframe-Attributen

Dataframe hat die folgenden Attribute.

Alle von ihnen sind wichtig, also schauen wir sie uns einzeln an.

Dataframe.T [Transponierte Matrix abrufen]

T kann die transponierte Matrix erhalten. Einfach ausgedrückt, können Sie Daten mit vertauschten Zeilen und Spalten abrufen.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df.T)

img123.png

Datarfame.at & Dataframe.iat [Extrahieren eines einzelnen Werts]

Mit at und iat können Sie den Wert jeder Position in ** Dataframe abrufen. ** ** ** ** Für dataframe at und iat sind immer zwei Argumente erforderlich **. (Um die Position auf eins zu beschränken) Der Unterschied zwischen at und iat besteht darin, dass at die Position nach Zeilen- und Spaltenbezeichnung angibt, während iat nach Zeilennummer und Spaltennummer angibt.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df.at['a','address']) # kyoto

Im Fall des obigen Codes kann Kyoto erhalten werden, da die Spalte "Adresse" der Zeile "a" angegeben ist.

img123.png

Bei Verwendung von iat ist dies wie folgt.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
print(df.iat[1,2]) #2020-02-11T12:00:00

img123.png

Da die Spalte "2" der Zeile "1" angegeben ist, kann 2020-02-11T12: 00: 00 abgerufen werden. (Zeilennummer und Spaltennummer beginnen bei 0)

Dataframe.loc & Dataframe.iloc [Zeilen und Spalten extrahieren]

Ich werde loc erklären, was so häufig vorkommt, dass es keine Übertreibung ist zu sagen, dass es das wichtigste in Dataframe ist. Wenn Sie sich daran erinnern, wie Sie loc verwenden, können Sie fast mit grundlegenden Inhalten umgehen. Die grundlegende Syntax von loc lautet wie folgt. ** Wenn Sie Slices verwenden, führt das Schreiben in ein Array zu einem Fehler. ** ** **

Dataframe.loc[[<Zeilenbeschriftung>], [Spaltenbezeichnung]]
Dataframe.loc[Zeilenbezeichnung A.:Zeilenbeschriftung B.,Spaltenbezeichnung A.:Spaltenbezeichnung B.]
data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Einreihige Extraktion
print(df.loc[['a']])

#Extraktion mehrerer Zeilen
print(df.loc[['a', 'b']])

#Einzelsäulenextraktion
print(df.loc[:, ['name']])

#Mehrsäulenextraktion
print(df.loc[:, ['name', 'address']])

#Extraktion von Zeilen- und Spaltenkombinationen
print(df.loc[['a', 'c'], ['name', 'birth']])
print(df.loc['a':'c', ['name', 'birth']])

Selbst wenn die Zeilenbeschriftung und die Spaltenbeschriftung nicht in ein Array geschrieben sind, können eine Zeile und eine Spalte extrahiert werden. Das Verhalten unterscheidet sich jedoch von der Extraktion einer Zeile und einer Spalte im Array. (Bitte beachten Sie, dass diese Spezifikation auch Verwirrung stiftet ...)

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Einreihige Extraktion
df.loc[['a']]
type(df.loc[['a']]) # pandas.core.frame.DataFrame

#Einreihige Extraktion
df.loc['a']
print(type(df.loc['a'])) # pandas.core.series.Series

#Einzelsäulenextraktion
df.loc[:, ['name']]
print(type(df.loc[:, ['name']])) # pandas.core.frame.DataFrame

#Einzelsäulenextraktion
df.loc[:, 'name']
print(type(df.loc[:, 'name'])) # pandas.core.series.Series

Wie beim obigen Code wird Dataframe zurückgegeben, wenn Sie ihn mit einem Array angeben, und wenn Sie ihn ohne Array angeben, wird Series zurückgegeben. (** Seien Sie vorsichtig, wenn Sie tatsächlich verwenden **)

DataFrame.columns & DataFrame.index [Spalten- und Zeilenbeschriftungen prüfen]

In vielen Situationen möchten Sie überprüfen, welche Art von Spalten- und Zeilenbeschriftungen im Datenrahmen festgelegt sind. Sie können die Liste der Spaltenbeschriftungen mit Spalten und Zeilenbeschriftungen mit Index überprüfen.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Spaltenbezeichnung anzeigen
print(df.columns) # Index(['name', 'address', 'birth'], dtype='object')

#Zeilenbeschriftung anzeigen
print(df.index) # Index(['a', 'b', 'c'], dtype='object')

DataFrame.shape [Anzahl der Zeilen und Spalten abrufen]

Es gibt viele Fälle, in denen Sie sehen möchten, wie viele Datenzeilen und -spalten in einem Datenrahmen vorhanden sind. Sie können die Anzahl der Zeilen und Spalten mithilfe der Form ermitteln. Der erste in Form zurückgegebene Taple ist die Anzahl der Zeilen und der zweite die Anzahl der Spalten.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Ermitteln Sie die Anzahl der Zeilen und Spalten
print(df.shape) # (3, 3)

DataFrame.values [Numpy Array abrufen]

DataFrame enthält neben Werten auch Informationen wie Zeilen- und Spaltenbeschriftungen. Wenn Sie jedoch keine Beschriftungsinformationen und nur Daten benötigen, können Sie diese in ein Numpy-Array konvertieren.

data = [
  ['taro', 'kyoto', '2020-01-01T12:00:00'],
  ['jiro', 'osaka', '2020-02-11T12:00:00'],
  ['saburo', 'nara', '2020-03-22T12:00:00']
]
df = pd.DataFrame(data = data, index = ['a', 'b', 'c'], columns = ['name', 'address', 'birth'])
#Holen Sie sich ein numpy Array
print(df.values)

img123.png

Wenn Sie es in ein Numpy-Array konvertieren, können Sie die Daten mit der Beschleunigermethode abrufen, die einem normalen zweidimensionalen Array ähnelt. ** Bitte beachten Sie, dass die Datenextraktionsmethode für DataFrame-, Series- und Numpy-Arrays unterschiedlich ist. ** ** ** (Dies ist auch eine Quelle der Verwirrung ...)

#Numpy-Arrays können wie normale zweidimensionale Arrays auf Daten zugreifen
#Extrahieren Sie die 0. Zeile und die 1. Spalte
print(df.values[0][1]) # kyoto

#Zeile 0 extrahieren
print(df.values[0])

#Sie können auch Slices verwenden
#Extrahieren Sie die erste Zeile
print(df.values[:, 1]) # ['kyoto' 'osaka' 'nara']

Schließlich

Pandas ist sicherlich schwierig, aber die offizielle Referenz ist sehr leicht verständlich geschrieben. Ich denke, es ist keine lächerliche Hürde zu verstehen, wenn Sie die Referenz sorgfältig lesen und mit dem Lernen fortfahren. (Vielleicht denke ich nur darüber nach, aber ...). Insbesondere 10 Minuten bis Pandas ist kompakt und leicht zu verstehen, daher der erste Ich kann es als Ausgangspunkt nur empfehlen.

Ich denke, Sie haben den Ausdruck "Quelle der Verwirrung" in diesem Artikel ungefähr viermal verwendet. Bitte beachten Sie, dass dieser Teil besonders kompliziert ist. Wenn Sie ihn nicht gut verstehen, können Sie ihn möglicherweise nicht verarbeiten, wenn die Datenmenge zunimmt oder wenn Sie Daten kombinieren.

Teil 2 wird schließlich die Pandas-Methode vorstellen. Es gibt so viele Arten von Methoden, dass es schwierig ist, sie zu lernen, aber ich werde sie so einfach wie möglich schreiben. Vielen Dank. (^^ ♪ Dann (^ _-) - ☆

Recommended Posts

Eine Einführung in Pandas, um zu lernen, während man leidet [Teil 1]
Einführung in Python, die auch Affen verstehen können (Teil 3)
Einführung in Python, die auch Affen verstehen können (Teil 1)
Einführung in Python, die auch Affen verstehen können (Teil 2)
Einführung in Word2Vec, die auch Katzen verstehen können
Eine Einführung in Cython, ohne tief zu gehen
Einführung in Cython ohne tief zu gehen -2-
Einführung in PyQt4 Teil 1
Einführung in Python numpy pandas matplotlib (für ~ B3 ~ part2)
Eine Einführung in die moderne Socket-API zum Erlernen in C.
Einführung in Private TensorFlow
Eine Einführung in das maschinelle Lernen
Eine Einführung in die Python-Programmierung
Einführung in die Bayes'sche Optimierung
Einführung in Ansible Teil In'Inventory '
Einführung in Python For, While
Einführung in Ansible Teil ④'Variable '
Einführung von "Scikit-Mobility", einer Bibliothek, mit der Sie menschliche Flussdaten mit Python einfach analysieren können (Teil 1)
Kalman Filter, den Sie verstehen können
Einführung in Ansible Teil 2 'Grundlegende Grammatik'
Eine Einführung in Mercurial für Nicht-Ingenieure
Einführung in Python Hands On Teil 1
Websites, die Ihnen beim Erlernen der Programmierung helfen
[Einführung in Python] Verwenden wir Pandas
[Einführung in Python] Verwenden wir Pandas
Einfaches Erlernen von Python beim Schreiben
[Einführung in Python] Verwenden wir Pandas
Erste Schritte mit Python für Nicht-Ingenieure
Einführung in Ansible Teil 1'Hallo Welt !! '
[Python Tutorial] Eine einfache Einführung in Python
[Für Anfänger] Super Einführung in neuronale Netze, die selbst Katzen verstehen können
[Python3] Code, der verwendet werden kann, wenn Sie ein Bild in einer bestimmten Größe ausschneiden möchten
[Python3] Code, der verwendet werden kann, wenn Sie die Erweiterung eines Bildes sofort ändern möchten