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 (* ^ ▽ ^ *)
Bitte beachten Sie, dass das Importieren der folgenden Bibliotheken in zukünftigen Notationen weggelassen wird.
import pandas as pd
import numpy as np
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
sr = pd.Series({'taro': 'kyoto', 'jiro': 'osaka', 'saburo': 'nara'})
print(sr.head())
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.
sr = pd.Series(['kyoto', 'osaka', 'nara'], index=['taro', 'jiro','saburo'] )
print(sr.head())
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 ...)
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.
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())
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())
Ü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())
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'])
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']]
Wenn Sie mehrere Spalten extrahieren, ist das extrahierte Ergebnis ein Datenrahmen anstelle einer Reihe.
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'])
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.)
Dataframe hat die folgenden Attribute.
Alle von ihnen sind wichtig, also schauen wir sie uns einzeln an.
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)
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.
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
Da die Spalte "2" der Zeile "1" angegeben ist, kann 2020-02-11T12: 00: 00 abgerufen werden. (Zeilennummer und Spaltennummer beginnen bei 0)
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 **)
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')
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 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)
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']
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