Python Pandas - Kurzanleitung

Pandas ist eine Open-Source-Python-Bibliothek, die mithilfe ihrer leistungsstarken Datenstrukturen ein leistungsstarkes Tool zur Datenmanipulation und -analyse bietet. Der Name Pandas leitet sich vom Wort Panel Data ab - eine Ökonometrie aus mehrdimensionalen Daten.

Im Jahr 2008 begann Entwickler Wes McKinney mit der Entwicklung von Pandas, wenn ein leistungsstarkes, flexibles Tool zur Datenanalyse benötigt wurde.

Vor Pandas wurde Python hauptsächlich zum Munging und zur Vorbereitung von Daten verwendet. Es hatte sehr wenig Beitrag zur Datenanalyse. Pandas haben dieses Problem gelöst. Mit Pandas können wir fünf typische Schritte bei der Verarbeitung und Analyse von Daten ausführen, unabhängig von der Herkunft der Daten - Laden, Vorbereiten, Bearbeiten, Modellieren und Analysieren.

Python mit Pandas wird in einer Vielzahl von Bereichen eingesetzt, einschließlich akademischer und kommerzieller Bereiche wie Finanzen, Wirtschaft, Statistik, Analytik usw.

Hauptmerkmale von Pandas

  • Schnelles und effizientes DataFrame-Objekt mit standardmäßiger und angepasster Indizierung.
  • Tools zum Laden von Daten in speicherinterne Datenobjekte aus verschiedenen Dateiformaten.
  • Datenausrichtung und integrierter Umgang mit fehlenden Daten.
  • Umformen und Schwenken von Datumssätzen.
  • Label-basiertes Slicing, Indizieren und Subsetting großer Datenmengen.
  • Spalten aus einer Datenstruktur können gelöscht oder eingefügt werden.
  • Gruppieren nach Daten für Aggregation und Transformationen.
  • Hochleistungs-Zusammenführen und Zusammenführen von Daten.
  • Zeitreihenfunktionalität.

Die Standard-Python-Distribution wird nicht mit dem Pandas-Modul geliefert. Eine einfache Alternative ist die Installation von NumPy mit dem beliebten Python-Paketinstallationsprogramm.pip.

pip install pandas

Wenn Sie das Anaconda Python-Paket installieren, wird Pandas standardmäßig wie folgt installiert:

Windows

  • Anaconda (von https://www.continuum.io) ist eine kostenlose Python-Distribution für den SciPy-Stack. Es ist auch für Linux und Mac verfügbar.

  • Canopy (https://www.enthought.com/products/canopy/) ist sowohl als kostenlose als auch als kommerzielle Distribution mit vollem SciPy-Stack für Windows, Linux und Mac erhältlich.

  • Python(x, y) ist eine kostenlose Python-Distribution mit SciPy-Stack und Spyder IDE für Windows. (Herunterladbar vonhttp://python-xy.github.io/)

Linux

Paketmanager der jeweiligen Linux-Distributionen werden verwendet, um ein oder mehrere Pakete im SciPy-Stack zu installieren.

For Ubuntu Users

sudo apt-get install python-numpy python-scipy python-matplotlibipythonipythonnotebook
python-pandas python-sympy python-nose

For Fedora Users

sudo yum install numpyscipy python-matplotlibipython python-pandas sympy
python-nose atlas-devel

Pandas befasst sich mit den folgenden drei Datenstrukturen:

  • Series
  • DataFrame
  • Panel

Diese Datenstrukturen bauen auf dem Numpy-Array auf, was bedeutet, dass sie schnell sind.

Dimension & Beschreibung

Der beste Weg, sich diese Datenstrukturen vorzustellen, besteht darin, dass die höherdimensionale Datenstruktur ein Container ihrer niedrigdimensionalen Datenstruktur ist. Beispielsweise ist DataFrame ein Container der Serie, Panel ist ein Container der DataFrame.

Datenstruktur Maße Beschreibung
Serie 1 1D markiertes homogenes Array, größenveränderbar.
Datenrahmen 2 Allgemeine 2D-markierte, größenveränderliche tabellarische Struktur mit möglicherweise heterogen typisierten Spalten.
Panel 3 Allgemeines 3D-markiertes, größenveränderliches Array.

Das Erstellen und Behandeln von zwei oder mehr dimensionalen Arrays ist eine mühsame Aufgabe. Der Benutzer muss beim Schreiben von Funktionen die Ausrichtung des Datensatzes berücksichtigen. Durch die Verwendung von Pandas-Datenstrukturen wird jedoch die mentale Anstrengung des Benutzers reduziert.

Bei tabellarischen Daten (DataFrame) ist es beispielsweise semantisch hilfreicher, an die zu denken index (die Reihen) und die columns anstatt Achse 0 und Achse 1.

Wandlungsfähigkeit

Alle Pandas-Datenstrukturen sind wertveränderlich (können geändert werden) und mit Ausnahme von Serien sind alle größenveränderlich. Serie ist Größe unveränderlich.

Note- DataFrame ist weit verbreitet und eine der wichtigsten Datenstrukturen. Panel wird viel weniger verwendet.

Serie

Serie ist eine eindimensionale Array-ähnliche Struktur mit homogenen Daten. Die folgende Reihe ist beispielsweise eine Sammlung von ganzen Zahlen 10, 23, 56,…

10 23 56 17 52 61 73 90 26 72

Wichtige Punkte

  • Homogene Daten
  • Größe unveränderlich
  • Werte von Daten veränderlich

DataFrame

DataFrame ist ein zweidimensionales Array mit heterogenen Daten. Zum Beispiel,

Name Alter Geschlecht Bewertung
Steve 32 Männlich 3.45
Lia 28 Weiblich 4.6
Vin 45 Männlich 3.9
Katie 38 Weiblich 2,78

Die Tabelle enthält die Daten eines Verkaufsteams einer Organisation mit ihrer Gesamtleistungsbewertung. Die Daten werden in Zeilen und Spalten dargestellt. Jede Spalte repräsentiert ein Attribut und jede Zeile repräsentiert eine Person.

Datentyp der Spalten

Die Datentypen der vier Spalten sind wie folgt:

Säule Art
Name String
Alter Ganze Zahl
Geschlecht String
Bewertung Schweben

Wichtige Punkte

  • Heterogene Daten
  • Größe veränderlich
  • Daten veränderlich

Panel

Panel ist eine dreidimensionale Datenstruktur mit heterogenen Daten. Es ist schwierig, das Panel in grafischer Darstellung darzustellen. Ein Panel kann jedoch als Container von DataFrame dargestellt werden.

Wichtige Punkte

  • Heterogene Daten
  • Größe veränderlich
  • Daten veränderlich

Series ist ein eindimensional beschriftetes Array, das Daten aller Art (Integer-, String-, Float-, Python-Objekte usw.) aufnehmen kann. Die Achsenbeschriftungen werden zusammen als Index bezeichnet.

pandas.Series

Eine Pandas-Serie kann mit dem folgenden Konstruktor erstellt werden:

pandas.Series( data, index, dtype, copy)

Die Parameter des Konstruktors sind wie folgt:

Sr.Nr. Parameter & Beschreibung
1

data

Daten haben verschiedene Formen wie ndarray, list, constants

2

index

Indexwerte müssen eindeutig und hashbar sein und dieselbe Länge wie Daten haben. Standardnp.arange(n) wenn kein Index übergeben wird.

3

dtype

dtype ist für den Datentyp. Wenn Keine, wird der Datentyp abgeleitet

4

copy

Daten kopieren. Standard False

Eine Serie kann mit verschiedenen Eingaben wie - erstellt werden

  • Array
  • Dict
  • Skalarwert oder Konstante

Erstellen Sie eine leere Serie

Eine Basisserie, die erstellt werden kann, ist eine leere Serie.

Beispiel

#import the pandas library and aliasing as pd
import pandas as pd
s = pd.Series()
print s

Es ist output ist wie folgt -

Series([], dtype: float64)

Erstellen Sie eine Serie aus ndarray

Wenn es sich bei den Daten um ein ndarray handelt, muss der übergebene Index dieselbe Länge haben. Wenn kein Index übergeben wird, ist dies standardmäßig der Indexrange(n) wo n ist die Array-Länge, dh [0,1,2,3…. range(len(array))-1].

Beispiel 1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data)
print s

Es ist output ist wie folgt -

0   a
1   b
2   c
3   d
dtype: object

Wir haben keinen Index übergeben, daher wurden standardmäßig die Indizes von 0 bis zugewiesen len(data)-1dh 0 bis 3.

Beispiel 2

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data,index=[100,101,102,103])
print s

Es ist output ist wie folgt -

100  a
101  b
102  c
103  d
dtype: object

Wir haben hier die Indexwerte übergeben. Jetzt können wir die benutzerdefinierten indizierten Werte in der Ausgabe sehen.

Erstellen Sie eine Serie aus dict

EIN dictkann als Eingabe übergeben werden. Wenn kein Index angegeben ist, werden die Wörterbuchschlüssel in einer sortierten Reihenfolge verwendet, um einen Index zu erstellen. Wennindex übergeben wird, werden die Werte in Daten, die den Beschriftungen im Index entsprechen, herausgezogen.

Beispiel 1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print s

Es ist output ist wie folgt -

a 0.0
b 1.0
c 2.0
dtype: float64

Observe - Wörterbuchschlüssel werden zum Erstellen eines Index verwendet.

Beispiel 2

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print s

Es ist output ist wie folgt -

b 1.0
c 2.0
d NaN
a 0.0
dtype: float64

Observe - Die Indexreihenfolge bleibt bestehen und das fehlende Element wird mit NaN (Not a Number) gefüllt.

Erstellen Sie eine Serie aus Scalar

Wenn Daten ein Skalarwert sind, muss ein Index angegeben werden. Der Wert wird wiederholt, um der Länge von zu entsprechenindex

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print s

Es ist output ist wie folgt -

0  5
1  5
2  5
3  5
dtype: int64

Zugriff auf Daten aus Serien mit Position

Auf Daten in der Reihe kann ähnlich wie in einem zugegriffen werden ndarray.

Beispiel 1

Rufen Sie das erste Element ab. Wie wir bereits wissen, beginnt die Zählung für das Array bei Null, was bedeutet, dass das erste Element an der nullten Position gespeichert wird und so weiter.

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve the first element
print s[0]

Es ist output ist wie folgt -

1

Beispiel 2

Rufen Sie die ersten drei Elemente der Serie ab. Wenn ein: davor eingefügt wird, werden alle Elemente ab diesem Index extrahiert. Wenn zwei Parameter (mit: zwischen ihnen) verwendet werden, werden Elemente zwischen den beiden Indizes (ohne den Stoppindex) verwendet.

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve the first three element
print s[:3]

Es ist output ist wie folgt -

a  1
b  2
c  3
dtype: int64

Beispiel 3

Rufen Sie die letzten drei Elemente ab.

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve the last three element
print s[-3:]

Es ist output ist wie folgt -

c  3
d  4
e  5
dtype: int64

Daten mit Label (Index) abrufen

Eine Serie ist wie eine feste Größe dict , dass Sie Werte über die Indexbezeichnung abrufen und festlegen können.

Beispiel 1

Rufen Sie ein einzelnes Element mit dem Indexbezeichnungswert ab.

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve a single element
print s['a']

Es ist output ist wie folgt -

1

Beispiel 2

Rufen Sie mehrere Elemente mithilfe einer Liste von Indexbeschriftungswerten ab.

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve multiple elements
print s[['a','c','d']]

Es ist output ist wie folgt -

a  1
c  3
d  4
dtype: int64

Beispiel 3

Wenn kein Label enthalten ist, wird eine Ausnahme ausgelöst.

import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])

#retrieve multiple elements
print s['f']

Es ist output ist wie folgt -

…
KeyError: 'f'

Ein Datenrahmen ist eine zweidimensionale Datenstruktur, dh Daten werden in Zeilen und Spalten tabellarisch ausgerichtet.

Funktionen von DataFrame

  • Potenziell sind Spalten unterschiedlicher Art
  • Größe - veränderlich
  • Beschriftete Achsen (Zeilen und Spalten)
  • Kann arithmetische Operationen für Zeilen und Spalten ausführen

Struktur

Nehmen wir an, wir erstellen einen Datenrahmen mit den Daten des Schülers.

Sie können sich das als SQL-Tabelle oder als Darstellung von Tabellenkalkulationsdaten vorstellen.

pandas.DataFrame

Ein Pandas DataFrame kann mit dem folgenden Konstruktor erstellt werden:

pandas.DataFrame( data, index, columns, dtype, copy)

Die Parameter des Konstruktors sind wie folgt:

Sr.Nr. Parameter & Beschreibung
1

data

Daten haben verschiedene Formen wie ndarray, Serien, Karten, Listen, Diktate, Konstanten und auch einen anderen DataFrame.

2

index

Für die Zeilenbeschriftungen lautet der Index, der für den resultierenden Frame verwendet werden soll, Optional Standard np.arange (n), wenn kein Index übergeben wird.

3

columns

Für Spaltenbeschriftungen lautet die optionale Standardsyntax - np.arange (n). Dies gilt nur, wenn kein Index übergeben wird.

4

dtype

Datentyp jeder Spalte.

5

copy

Dieser Befehl (oder was auch immer) wird zum Kopieren von Daten verwendet, wenn der Standardwert False ist.

Erstellen Sie einen DataFrame

Ein Pandas DataFrame kann mit verschiedenen Eingaben wie - erstellt werden

  • Lists
  • dict
  • Series
  • Numpy ndarrays
  • Ein weiterer DataFrame

In den folgenden Abschnitten dieses Kapitels erfahren Sie, wie Sie mit diesen Eingaben einen DataFrame erstellen.

Erstellen Sie einen leeren Datenrahmen

Ein grundlegender DataFrame, der erstellt werden kann, ist ein leerer Dataframe.

Beispiel

#import the pandas library and aliasing as pd
import pandas as pd
df = pd.DataFrame()
print df

Es ist output ist wie folgt -

Empty DataFrame
Columns: []
Index: []

Erstellen Sie einen DataFrame aus Listen

Der DataFrame kann mithilfe einer einzelnen Liste oder einer Liste von Listen erstellt werden.

Beispiel 1

import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print df

Es ist output ist wie folgt -

0
0    1
1    2
2    3
3    4
4    5

Beispiel 2

import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print df

Es ist output ist wie folgt -

Name      Age
0     Alex      10
1     Bob       12
2     Clarke    13

Beispiel 3

import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print df

Es ist output ist wie folgt -

Name     Age
0     Alex     10.0
1     Bob      12.0
2     Clarke   13.0

Note - Beobachten Sie, die dtype Der Parameter ändert den Typ der Altersspalte in Gleitkomma.

Erstellen Sie einen DataFrame aus Dict of ndarrays / Lists

All die ndarraysmuss gleich lang sein. Wenn der Index übergeben wird, sollte die Länge des Index der Länge der Arrays entsprechen.

Wenn kein Index übergeben wird, ist der Index standardmäßig der Bereich (n), wobei n ist die Array-Länge.

Beispiel 1

import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print df

Es ist output ist wie folgt -

Age      Name
0     28        Tom
1     34       Jack
2     29      Steve
3     42      Ricky

Note- Beachten Sie die Werte 0,1,2,3. Sie sind der Standardindex, der jedem anhand des Funktionsbereichs (n) zugewiesen wird.

Beispiel 2

Lassen Sie uns nun einen indizierten DataFrame mithilfe von Arrays erstellen.

import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print df

Es ist output ist wie folgt -

Age    Name
rank1    28      Tom
rank2    34     Jack
rank3    29    Steve
rank4    42    Ricky

Note - Beobachten Sie, die index Der Parameter weist jeder Zeile einen Index zu.

Erstellen Sie einen DataFrame aus der Liste der Dicts

Eine Liste von Wörterbüchern kann als Eingabedaten übergeben werden, um einen DataFrame zu erstellen. Die Wörterbuchschlüssel werden standardmäßig als Spaltennamen verwendet.

Beispiel 1

Das folgende Beispiel zeigt, wie Sie einen DataFrame erstellen, indem Sie eine Liste von Wörterbüchern übergeben.

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print df

Es ist output ist wie folgt -

a    b      c
0   1   2     NaN
1   5   10   20.0

Note - Beachten Sie, dass NaN (Not a Number) in fehlenden Bereichen angehängt wird.

Beispiel 2

Das folgende Beispiel zeigt, wie Sie einen DataFrame erstellen, indem Sie eine Liste der Wörterbücher und der Zeilenindizes übergeben.

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print df

Es ist output ist wie folgt -

a   b       c
first   1   2     NaN
second  5   10   20.0

Beispiel 3

Das folgende Beispiel zeigt, wie Sie einen DataFrame mit einer Liste von Wörterbüchern, Zeilenindizes und Spaltenindizes erstellen.

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]

#With two column indices, values same as dictionary keys
df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])

#With two column indices with one index with other name
df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
print df1
print df2

Es ist output ist wie folgt -

#df1 output
         a  b
first    1  2
second   5  10

#df2 output
         a  b1
first    1  NaN
second   5  NaN

Note- Beachten Sie, dass df2 DataFrame mit einem anderen Spaltenindex als dem Wörterbuchschlüssel erstellt wird. Daher wurden die NaNs an Ort und Stelle angehängt. Während df1 mit Spaltenindizes wie Wörterbuchschlüssel erstellt wird, wird NaN angehängt.

Erstellen Sie einen DataFrame aus Dict of Series

Das Wörterbuch der Serien kann als DataFrame übergeben werden. Der resultierende Index ist die Vereinigung aller übergebenen Serienindizes.

Beispiel

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df

Es ist output ist wie folgt -

one    two
a     1.0    1
b     2.0    2
c     3.0    3
d     NaN    4

Note - Beachten Sie, dass es für die erste Serie kein Etikett gibt ‘d’ bestanden, aber im Ergebnis für die d Etikett, NaN wird mit NaN angehängt.

Lass uns jetzt verstehen column selection, addition, und deletion durch Beispiele.

Spaltenauswahl

Wir werden dies verstehen, indem wir eine Spalte aus dem DataFrame auswählen.

Beispiel

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df ['one']

Es ist output ist wie folgt -

a     1.0
b     2.0
c     3.0
d     NaN
Name: one, dtype: float64

Spaltenaddition

Wir werden dies verstehen, indem wir einem vorhandenen Datenrahmen eine neue Spalte hinzufügen.

Beispiel

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

# Adding a new column to an existing DataFrame object with column label by passing new series

print ("Adding a new column by passing as Series:")
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print df

print ("Adding a new column using the existing columns in DataFrame:")
df['four']=df['one']+df['three']

print df

Es ist output ist wie folgt -

Adding a new column by passing as Series:
     one   two   three
a    1.0    1    10.0
b    2.0    2    20.0
c    3.0    3    30.0
d    NaN    4    NaN

Adding a new column using the existing columns in DataFrame:
      one   two   three    four
a     1.0    1    10.0     11.0
b     2.0    2    20.0     22.0
c     3.0    3    30.0     33.0
d     NaN    4     NaN     NaN

Spalten löschen

Spalten können gelöscht oder gelöscht werden. Nehmen wir ein Beispiel, um zu verstehen, wie.

Beispiel

# Using the previous DataFrame, we will delete a column
# using del function
import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']), 
   'three' : pd.Series([10,20,30], index=['a','b','c'])}

df = pd.DataFrame(d)
print ("Our dataframe is:")
print df

# using del function
print ("Deleting the first column using DEL function:")
del df['one']
print df

# using pop function
print ("Deleting another column using POP function:")
df.pop('two')
print df

Es ist output ist wie folgt -

Our dataframe is:
      one   three  two
a     1.0    10.0   1
b     2.0    20.0   2
c     3.0    30.0   3
d     NaN     NaN   4

Deleting the first column using DEL function:
      three    two
a     10.0     1
b     20.0     2
c     30.0     3
d     NaN      4

Deleting another column using POP function:
   three
a  10.0
b  20.0
c  30.0
d  NaN

Zeilenauswahl, Hinzufügung und Löschung

Wir werden nun das Auswählen, Hinzufügen und Löschen von Zeilen anhand von Beispielen verstehen. Beginnen wir mit dem Konzept der Auswahl.

Auswahl nach Label

Zeilen können ausgewählt werden, indem die Zeilenbezeichnung an a übergeben wird loc Funktion.

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df.loc['b']

Es ist output ist wie folgt -

one 2.0
two 2.0
Name: b, dtype: float64

Das Ergebnis ist eine Reihe mit Beschriftungen als Spaltennamen des DataFrame. Und der Name der Serie ist das Etikett, mit dem sie abgerufen wird.

Auswahl nach ganzzahliger Position

Zeilen können ausgewählt werden, indem eine ganzzahlige Position an eine übergeben wird iloc Funktion.

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df.iloc[2]

Es ist output ist wie folgt -

one   3.0
two   3.0
Name: c, dtype: float64

Reihen schneiden

Mit dem Operator ':' können mehrere Zeilen ausgewählt werden.

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df[2:4]

Es ist output ist wie folgt -

one  two
c  3.0    3
d  NaN    4

Hinzufügen von Zeilen

Fügen Sie einem DataFrame mithilfe von neue Zeilen hinzu appendFunktion. Diese Funktion hängt die Zeilen am Ende an.

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

df = df.append(df2)
print df

Es ist output ist wie folgt -

a  b
0  1  2
1  3  4
0  5  6
1  7  8

Löschen von Zeilen

Verwenden Sie die Indexbezeichnung, um Zeilen aus einem DataFrame zu löschen oder zu löschen. Wenn die Beschriftung dupliziert wird, werden mehrere Zeilen gelöscht.

Wenn Sie im obigen Beispiel beobachten, sind die Beschriftungen doppelt vorhanden. Lassen Sie uns ein Etikett ablegen und sehen, wie viele Zeilen gelöscht werden.

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

df = df.append(df2)

# Drop rows with label 0
df = df.drop(0)

print df

Es ist output ist wie folgt -

a b
1 3 4
1 7 8

Im obigen Beispiel wurden zwei Zeilen gelöscht, da diese beiden die gleiche Bezeichnung 0 enthalten.

EIN panelist ein 3D-Datencontainer. Der BegriffPanel data ist aus der Ökonometrie abgeleitet und teilweise verantwortlich für den Namen Pandas - pan(el)-da(ta)-s.

Die Namen für die 3 Achsen sollen der Beschreibung von Operationen mit Paneldaten eine semantische Bedeutung verleihen. Sie sind -

  • items - Achse 0, jedes Element entspricht einem darin enthaltenen DataFrame.

  • major_axis - Achse 1, es ist der Index (Zeilen) jedes der DataFrames.

  • minor_axis - Achse 2, es sind die Spalten jedes der DataFrames.

pandas.Panel ()

Ein Panel kann mit dem folgenden Konstruktor erstellt werden:

pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)

Die Parameter des Konstruktors sind wie folgt:

Parameter Beschreibung
Daten Daten haben verschiedene Formen wie ndarray, Serien, Karten, Listen, Diktate, Konstanten und auch einen anderen DataFrame
Artikel Achse = 0
Hauptachse Achse = 1
minor_axis Achse = 2
dtype Datentyp jeder Spalte
Kopieren Daten kopieren. Standard,false

Panel erstellen

Ein Panel kann auf verschiedene Arten erstellt werden:

  • Von ndarrays
  • Aus dem Diktat von DataFrames

Aus 3D ndarray

# creating an empty panel
import pandas as pd
import numpy as np

data = np.random.rand(2,4,5)
p = pd.Panel(data)
print p

Es ist output ist wie folgt -

<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 5 (minor_axis)
Items axis: 0 to 1
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 4

Note - Beachten Sie die Abmessungen des leeren Feldes und des obigen Feldes, alle Objekte sind unterschiedlich.

Aus dem Diktat von DataFrame-Objekten

#creating an empty panel
import pandas as pd
import numpy as np

data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p

Es ist output ist wie folgt -

Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 2

Erstellen Sie ein leeres Bedienfeld

Ein leeres Panel kann mit dem Panel-Konstruktor wie folgt erstellt werden:

#creating an empty panel
import pandas as pd
p = pd.Panel()
print p

Es ist output ist wie folgt -

<class 'pandas.core.panel.Panel'>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
Items axis: None
Major_axis axis: None
Minor_axis axis: None

Auswählen der Daten aus dem Bedienfeld

Wählen Sie die Daten aus dem Bedienfeld mit - aus

  • Items
  • Major_axis
  • Minor_axis

Elemente verwenden

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p['Item1']

Es ist output ist wie folgt -

0          1          2
0    0.488224  -0.128637   0.930817
1    0.417497   0.896681   0.576657
2   -2.775266   0.571668   0.290082
3   -0.400538  -0.144234   1.110535

Wir haben zwei Elemente und haben Element1 abgerufen. Das Ergebnis ist ein DataFrame mit 4 Zeilen und 3 SpaltenMajor_axis und Minor_axis Maße.

Verwenden von major_axis

Auf Daten kann mit der Methode zugegriffen werden panel.major_axis(index).

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p.major_xs(1)

Es ist output ist wie folgt -

Item1       Item2
0   0.417497    0.748412
1   0.896681   -0.557322
2   0.576657       NaN

Minor_axis verwenden

Auf Daten kann mit der Methode zugegriffen werden panel.minor_axis(index).

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p.minor_xs(1)

Es ist output ist wie folgt -

Item1       Item2
0   -0.128637   -1.047032
1    0.896681   -0.557322
2    0.571668    0.431953
3   -0.144234    1.302466

Note - Beachten Sie die Änderungen in den Abmessungen.

Inzwischen haben wir die drei Pandas DataStructures kennengelernt und erfahren, wie sie erstellt werden. Wir werden uns aufgrund seiner Bedeutung für die Echtzeit-Datenverarbeitung hauptsächlich auf die DataFrame-Objekte konzentrieren und auch einige andere DataStructures diskutieren.

Grundlegende Funktionalität der Serie

Sr.Nr. Attribut oder Methode & Beschreibung
1

axes

Gibt eine Liste der Zeilenachsenbeschriftungen zurück

2

dtype

Gibt den dtype des Objekts zurück.

3

empty

Gibt True zurück, wenn die Serie leer ist.

4

ndim

Gibt die Anzahl der Dimensionen der zugrunde liegenden Daten per Definition 1 zurück.

5

size

Gibt die Anzahl der Elemente in den zugrunde liegenden Daten zurück.

6

values

Gibt die Serie als ndarray zurück.

7

head()

Gibt die ersten n Zeilen zurück.

8

tail()

Gibt die letzten n Zeilen zurück.

Lassen Sie uns nun eine Serie erstellen und alle oben aufgeführten Operationen für tabellarische Attribute anzeigen.

Beispiel

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print s

Es ist output ist wie folgt -

0   0.967853
1  -0.148368
2  -1.395906
3  -1.758394
dtype: float64

Achsen

Gibt die Liste der Beschriftungen der Serie zurück.

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print ("The axes are:")
print s.axes

Es ist output ist wie folgt -

The axes are:
[RangeIndex(start=0, stop=4, step=1)]

Das obige Ergebnis ist ein kompaktes Format einer Liste von Werten von 0 bis 5, dh [0,1,2,3,4].

leer

Gibt den Booleschen Wert zurück, der angibt, ob das Objekt leer ist oder nicht. True gibt an, dass das Objekt leer ist.

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print ("Is the Object empty?")
print s.empty

Es ist output ist wie folgt -

Is the Object empty?
False

ndim

Gibt die Anzahl der Dimensionen des Objekts zurück. Per Definition ist eine Serie eine 1D-Datenstruktur, daher wird sie zurückgegeben

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print s

print ("The dimensions of the object:")
print s.ndim

Es ist output ist wie folgt -

0   0.175898
1   0.166197
2  -0.609712
3  -1.377000
dtype: float64

The dimensions of the object:
1

Größe

Gibt die Größe (Länge) der Serie zurück.

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(2))
print s
print ("The size of the object:")
print s.size

Es ist output ist wie folgt -

0   3.078058
1  -1.207803
dtype: float64

The size of the object:
2

Werte

Gibt die tatsächlichen Daten in der Reihe als Array zurück.

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print s

print ("The actual data series is:")
print s.values

Es ist output ist wie folgt -

0   1.787373
1  -0.605159
2   0.180477
3  -0.140922
dtype: float64

The actual data series is:
[ 1.78737302 -0.60515881 0.18047664 -0.1409218 ]

Kopf & Schwanz

Verwenden Sie die Methoden head () und tail (), um ein kleines Beispiel einer Serie oder des DataFrame-Objekts anzuzeigen.

head() gibt den ersten zurück nZeilen (Indexwerte beachten). Die Standardanzahl der anzuzeigenden Elemente beträgt fünf, Sie können jedoch eine benutzerdefinierte Anzahl übergeben.

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print ("The original series is:")
print s

print ("The first two rows of the data series:")
print s.head(2)

Es ist output ist wie folgt -

The original series is:
0   0.720876
1  -0.765898
2   0.479221
3  -0.139547
dtype: float64

The first two rows of the data series:
0   0.720876
1  -0.765898
dtype: float64

tail() gibt den letzten zurück nZeilen (Indexwerte beachten). Die Standardanzahl der anzuzeigenden Elemente beträgt fünf, Sie können jedoch eine benutzerdefinierte Anzahl übergeben.

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print ("The original series is:")
print s

print ("The last two rows of the data series:")
print s.tail(2)

Es ist output ist wie folgt -

The original series is:
0 -0.655091
1 -0.881407
2 -0.608592
3 -2.341413
dtype: float64

The last two rows of the data series:
2 -0.608592
3 -2.341413
dtype: float64

Grundlegende DataFrame-Funktionalität

Lassen Sie uns nun verstehen, was DataFrame Basic Functionality ist. In den folgenden Tabellen sind die wichtigen Attribute oder Methoden aufgeführt, die für die grundlegende Funktionalität von DataFrame hilfreich sind.

Sr.Nr. Attribut oder Methode & Beschreibung
1

T

Transponiert Zeilen und Spalten.

2

axes

Gibt eine Liste mit den Zeilenachsen- und Spaltenachsenbeschriftungen als einzigen Elementen zurück.

3

dtypes

Gibt die dtypes in diesem Objekt zurück.

4

empty

True, wenn NDFrame vollständig leer ist [keine Elemente]; wenn eine der Achsen die Länge 0 hat.

5

ndim

Anzahl der Achsen / Array-Dimensionen.

6

shape

Gibt ein Tupel zurück, das die Dimensionalität des DataFrame darstellt.

7

size

Anzahl der Elemente im NDFrame.

8

values

Numpy Darstellung von NDFrame.

9

head()

Gibt die ersten n Zeilen zurück.

10

tail()

Gibt die letzten n Zeilen zurück.

Lassen Sie uns nun einen DataFrame erstellen und sehen, wie die oben genannten Attribute funktionieren.

Beispiel

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data series is:")
print df

Es ist output ist wie folgt -

Our data series is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

T (Transponieren)

Gibt die Transponierung des DataFrame zurück. Die Zeilen und Spalten werden ausgetauscht.

import pandas as pd
import numpy as np
 
# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

# Create a DataFrame
df = pd.DataFrame(d)
print ("The transpose of the data series is:")
print df.T

Es ist output ist wie folgt -

The transpose of the data series is:
         0     1       2      3      4      5       6
Age      25    26      25     23     30     29      23
Name     Tom   James   Ricky  Vin    Steve  Smith   Jack
Rating   4.23  3.24    3.98   2.56   3.2    4.6     3.8

Achsen

Gibt die Liste der Zeilenachsenbeschriftungen und Spaltenachsenbeschriftungen zurück.

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Row axis labels and column axis labels are:")
print df.axes

Es ist output ist wie folgt -

Row axis labels and column axis labels are:

[RangeIndex(start=0, stop=7, step=1), Index([u'Age', u'Name', u'Rating'],
dtype='object')]

dtypes

Gibt den Datentyp jeder Spalte zurück.

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("The data types of each column are:")
print df.dtypes

Es ist output ist wie folgt -

The data types of each column are:
Age     int64
Name    object
Rating  float64
dtype: object

leer

Gibt den Booleschen Wert zurück, der angibt, ob das Objekt leer ist oder nicht. True gibt an, dass das Objekt leer ist.

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Is the object empty?")
print df.empty

Es ist output ist wie folgt -

Is the object empty?
False

ndim

Gibt die Anzahl der Dimensionen des Objekts zurück. Per Definition ist DataFrame ein 2D-Objekt.

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The dimension of the object is:")
print df.ndim

Es ist output ist wie folgt -

Our object is:
      Age    Name     Rating
0     25     Tom      4.23
1     26     James    3.24
2     25     Ricky    3.98
3     23     Vin      2.56
4     30     Steve    3.20
5     29     Smith    4.60
6     23     Jack     3.80

The dimension of the object is:
2

gestalten

Gibt ein Tupel zurück, das die Dimensionalität des DataFrame darstellt. Tupel (a, b), wobei a die Anzahl der Zeilen und darstelltb repräsentiert die Anzahl der Spalten.

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The shape of the object is:")
print df.shape

Es ist output ist wie folgt -

Our object is:
   Age   Name    Rating
0  25    Tom     4.23
1  26    James   3.24
2  25    Ricky   3.98
3  23    Vin     2.56
4  30    Steve   3.20
5  29    Smith   4.60
6  23    Jack    3.80

The shape of the object is:
(7, 3)

Größe

Gibt die Anzahl der Elemente im DataFrame zurück.

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The total number of elements in our object is:")
print df.size

Es ist output ist wie folgt -

Our object is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The total number of elements in our object is:
21

Werte

Gibt die tatsächlichen Daten im DataFrame als zurück NDarray.

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The actual data in our data frame is:")
print df.values

Es ist output ist wie folgt -

Our object is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80
The actual data in our data frame is:
[[25 'Tom' 4.23]
[26 'James' 3.24]
[25 'Ricky' 3.98]
[23 'Vin' 2.56]
[30 'Steve' 3.2]
[29 'Smith' 4.6]
[23 'Jack' 3.8]]

Kopf & Schwanz

Verwenden Sie die Taste, um ein kleines Beispiel eines DataFrame-Objekts anzuzeigen head() und tail () Methoden. head() gibt den ersten zurück nZeilen (Indexwerte beachten). Die Standardanzahl der anzuzeigenden Elemente beträgt fünf, Sie können jedoch eine benutzerdefinierte Anzahl übergeben.

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data frame is:")
print df
print ("The first two rows of the data frame is:")
print df.head(2)

Es ist output ist wie folgt -

Our data frame is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The first two rows of the data frame is:
   Age   Name   Rating
0  25    Tom    4.23
1  26    James  3.24

tail() gibt den letzten zurück nZeilen (Indexwerte beachten). Die Standardanzahl der anzuzeigenden Elemente beträgt fünf, Sie können jedoch eine benutzerdefinierte Anzahl übergeben.

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack']),
   'Age':pd.Series([25,26,25,23,30,29,23]), 
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data frame is:")
print df
print ("The last two rows of the data frame is:")
print df.tail(2)

Es ist output ist wie folgt -

Our data frame is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The last two rows of the data frame is:
    Age   Name    Rating
5   29    Smith    4.6
6   23    Jack     3.8

Eine große Anzahl von Methoden berechnet gemeinsam beschreibende Statistiken und andere verwandte Operationen in DataFrame. Die meisten davon sind Aggregationen wiesum(), mean(), aber einige von ihnen mögen sumsum(), produzieren ein Objekt der gleichen Größe. Im Allgemeinen nehmen diese Methoden eineaxisArgument, genau wie ndarray. {sum, std, ...}, aber die Achse kann durch Name oder Ganzzahl angegeben werden

  • DataFrame - "Index" (Achse = 0, Standard), "Spalten" (Achse = 1)

Lassen Sie uns einen DataFrame erstellen und dieses Objekt in diesem Kapitel für alle Operationen verwenden.

Beispiel

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df

Es ist output ist wie folgt -

Age  Name   Rating
0   25   Tom     4.23
1   26   James   3.24
2   25   Ricky   3.98
3   23   Vin     2.56
4   30   Steve   3.20
5   29   Smith   4.60
6   23   Jack    3.80
7   34   Lee     3.78
8   40   David   2.98
9   30   Gasper  4.80
10  51   Betina  4.10
11  46   Andres  3.65

Summe()

Gibt die Summe der Werte für die angeforderte Achse zurück. Standardmäßig ist die Achse der Index (Achse = 0).

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.sum()

Es ist output ist wie folgt -

Age                                                    382
Name     TomJamesRickyVinSteveSmithJackLeeDavidGasperBe...
Rating                                               44.92
dtype: object

Jede einzelne Spalte wird einzeln hinzugefügt (Zeichenfolgen werden angehängt).

Achse = 1

Diese Syntax gibt die Ausgabe wie unten gezeigt aus.

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}
 
#Create a DataFrame
df = pd.DataFrame(d)
print df.sum(1)

Es ist output ist wie folgt -

0    29.23
1    29.24
2    28.98
3    25.56
4    33.20
5    33.60
6    26.80
7    37.78
8    42.98
9    34.80
10   55.10
11   49.65
dtype: float64

bedeuten()

Gibt den Durchschnittswert zurück

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.mean()

Es ist output ist wie folgt -

Age       31.833333
Rating     3.743333
dtype: float64

std ()

Gibt die Bressel-Standardabweichung der numerischen Spalten zurück.

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.std()

Es ist output ist wie folgt -

Age       9.232682
Rating    0.661628
dtype: float64

Funktionen & Beschreibung

Lassen Sie uns nun die Funktionen unter Beschreibende Statistik in Python Pandas verstehen. In der folgenden Tabelle sind die wichtigen Funktionen aufgeführt -

Sr.Nr. Funktion Beschreibung
1 Anzahl() Anzahl der Nicht-Null-Beobachtungen
2 Summe() Summe der Werte
3 bedeuten() Mittelwert der Werte
4 Median() Median der Werte
5 Modus() Art der Werte
6 std () Standardabweichung der Werte
7 Mindest() Mindestwert
8 max () Höchster Wert
9 Abs() Absoluter Wert
10 prod () Produkt der Werte
11 cumsum () Kumulative Summe
12 cumprod () Kumulatives Produkt

Note- Da DataFrame eine heterogene Datenstruktur ist. Generische Operationen funktionieren nicht mit allen Funktionen.

  • Funktionen wie sum(), cumsum()Arbeiten Sie fehlerfrei mit numerischen und Zeichen- (oder) Zeichenfolgendatenelementen. Obwohln In der Praxis werden Zeichenaggregationen im Allgemeinen nie verwendet. Diese Funktionen lösen keine Ausnahme aus.

  • Funktionen wie abs(), cumprod() Ausnahme auslösen, wenn der DataFrame Zeichen- oder Zeichenfolgendaten enthält, da solche Operationen nicht ausgeführt werden können.

Daten zusammenfassen

Das describe() Die Funktion berechnet eine Zusammenfassung der Statistiken zu den DataFrame-Spalten.

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.describe()

Es ist output ist wie folgt -

Age         Rating
count    12.000000      12.000000
mean     31.833333       3.743333
std       9.232682       0.661628
min      23.000000       2.560000
25%      25.000000       3.230000
50%      29.500000       3.790000
75%      35.500000       4.132500
max      51.000000       4.800000

Diese Funktion gibt die mean, std und IQRWerte. Die Funktion schließt die Zeichenspalten und die Zusammenfassung der numerischen Spalten aus.'include'ist das Argument, mit dem die erforderlichen Informationen darüber übergeben werden, welche Spalten für die Zusammenfassung berücksichtigt werden müssen. Nimmt die Liste der Werte; Standardmäßig 'Nummer'.

  • object - Fasst String-Spalten zusammen
  • number - Fasst numerische Spalten zusammen
  • all - Fasst alle Spalten zusammen (sollte nicht als Listenwert übergeben werden)

Verwenden Sie nun die folgende Anweisung im Programm und überprüfen Sie die Ausgabe -

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.describe(include=['object'])

Es ist output ist wie folgt -

Name
count       12
unique      12
top      Ricky
freq         1

Verwenden Sie nun die folgende Anweisung und überprüfen Sie die Ausgabe -

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df. describe(include='all')

Es ist output ist wie folgt -

Age          Name       Rating
count   12.000000        12    12.000000
unique        NaN        12          NaN
top           NaN     Ricky          NaN
freq          NaN         1          NaN
mean    31.833333       NaN     3.743333
std      9.232682       NaN     0.661628
min     23.000000       NaN     2.560000
25%     25.000000       NaN     3.230000
50%     29.500000       NaN     3.790000
75%     35.500000       NaN     4.132500
max     51.000000       NaN     4.800000

Um die Funktionen Ihrer eigenen oder einer anderen Bibliothek auf Pandas-Objekte anzuwenden, sollten Sie die drei wichtigen Methoden kennen. Die Methoden wurden unten diskutiert. Die geeignete Methode hängt davon ab, ob Ihre Funktion einen gesamten DataFrame, zeilen- oder spaltenweise oder elementweise ausführen soll.

  • Tabelle weise Funktion Anwendung: pipe ()
  • Zeilen- oder spaltenweise Funktionsanwendung: apply ()
  • Elementweise Funktion Anwendung: applymap ()

Tabellenweise Funktionsanwendung

Benutzerdefinierte Operationen können ausgeführt werden, indem die Funktion und die entsprechende Anzahl von Parametern als Pipe-Argumente übergeben werden. Somit wird die Operation für den gesamten DataFrame ausgeführt.

Fügen Sie beispielsweise allen Elementen im DataFrame den Wert 2 hinzu. Dann,

Addiererfunktion

Die Addiererfunktion fügt zwei numerische Werte als Parameter hinzu und gibt die Summe zurück.

def adder(ele1,ele2):
   return ele1+ele2

Wir werden nun die benutzerdefinierte Funktion verwenden, um Operationen am DataFrame durchzuführen.

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)

Sehen wir uns das vollständige Programm an -

import pandas as pd
import numpy as np

def adder(ele1,ele2):
   return ele1+ele2

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.pipe(adder,2)
print df.apply(np.mean)

Es ist output ist wie folgt -

col1       col2       col3
0   2.176704   2.219691   1.509360
1   2.222378   2.422167   3.953921
2   2.241096   1.135424   2.696432
3   2.355763   0.376672   1.182570
4   2.308743   2.714767   2.130288

Zeilen- oder spaltenweise Funktionsanwendung

Mit dem können beliebige Funktionen entlang der Achsen eines DataFrames oder Panels angewendet werden apply()Methode, die wie die deskriptiven Statistikmethoden ein optionales Achsenargument verwendet. Standardmäßig wird die Operation spaltenweise ausgeführt, wobei jede Spalte als Array-ähnlich betrachtet wird.

Beispiel 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean)
print df.apply(np.mean)

Es ist output ist wie folgt -

col1   -0.288022
col2    1.044839
col3   -0.187009
dtype: float64

Durch vorbei axis Parameter können Operationen zeilenweise ausgeführt werden.

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(np.mean,axis=1)
print df.apply(np.mean)

Es ist output ist wie folgt -

col1    0.034093
col2   -0.152672
col3   -0.229728
dtype: float64

Beispiel 3

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.apply(lambda x: x.max() - x.min())
print df.apply(np.mean)

Es ist output ist wie folgt -

col1   -0.167413
col2   -0.370495
col3   -0.707631
dtype: float64

Elementweise Funktionsanwendung

Nicht alle Funktionen können vektorisiert werden (weder die NumPy-Arrays, die ein anderes Array zurückgeben, noch ein Wert), die Methoden applymap() auf DataFrame und analogously map() on Series akzeptiert alle Python-Funktionen, die einen einzelnen Wert annehmen und einen einzelnen Wert zurückgeben.

Beispiel 1

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])

# My custom function
df['col1'].map(lambda x:x*100)
print df.apply(np.mean)

Es ist output ist wie folgt -

col1    0.480742
col2    0.454185
col3    0.266563
dtype: float64

Beispiel 2

import pandas as pd
import numpy as np

# My custom function
df = pd.DataFrame(np.random.randn(5,3),columns=['col1','col2','col3'])
df.applymap(lambda x:x*100)
print df.apply(np.mean)

Es ist output ist wie folgt -

col1    0.395263
col2    0.204418
col3   -0.795188
dtype: float64

ReindexingÄndert die Zeilen- und Spaltenbeschriftungen eines DataFrame. Indizieren Mittel , um die Daten anzupassen entlang einer bestimmten Achse einen gegebenen Satz von Etiketten zu entsprechen.

Mehrere Operationen können durch Indizieren wie - ausgeführt werden.

  • Ordnen Sie die vorhandenen Daten neu an, damit sie mit einem neuen Satz von Beschriftungen übereinstimmen.

  • Fügen Sie Markierungen für fehlende Werte (NA) an Etikettenpositionen ein, an denen keine Daten für das Etikett vorhanden waren.

Beispiel

import pandas as pd
import numpy as np

N=20

df = pd.DataFrame({
   'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
   'x': np.linspace(0,stop=N-1,num=N),
   'y': np.random.rand(N),
   'C': np.random.choice(['Low','Medium','High'],N).tolist(),
   'D': np.random.normal(100, 10, size=(N)).tolist()
})

#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])

print df_reindexed

Es ist output ist wie folgt -

A    C     B
0  2016-01-01  Low   NaN
2  2016-01-03  High  NaN
5  2016-01-06  Low   NaN

Neu indizieren, um sich an anderen Objekten auszurichten

Möglicherweise möchten Sie ein Objekt nehmen und seine Achsen neu indizieren, um sie mit einem anderen Objekt zu kennzeichnen. Betrachten Sie das folgende Beispiel, um dasselbe zu verstehen.

Beispiel

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])

df1 = df1.reindex_like(df2)
print df1

Es ist output ist wie folgt -

col1         col2         col3
0    -2.467652    -1.211687    -0.391761
1    -0.287396     0.522350     0.562512
2    -0.255409    -0.483250     1.866258
3    -1.150467    -0.646493    -0.222462
4     0.152768    -2.056643     1.877233
5    -1.155997     1.528719    -1.343719
6    -1.015606    -1.245936    -0.295275

Note - Hier die df1 DataFrame wird wie geändert und neu indiziert df2. Die Spaltennamen sollten übereinstimmen, da sonst NAN für die gesamte Spaltenbezeichnung hinzugefügt wird.

Füllen beim ReIndexieren

reindex() verwendet eine optionale Parametermethode, bei der es sich um eine Füllmethode mit den folgenden Werten handelt:

  • pad/ffill - Werte vorwärts füllen

  • bfill/backfill - Werte rückwärts füllen

  • nearest - Füllen Sie aus den nächsten Indexwerten

Beispiel

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])

# Padding NAN's
print df2.reindex_like(df1)

# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill:")
print df2.reindex_like(df1,method='ffill')

Es ist output ist wie folgt -

col1        col2       col3
0    1.311620   -0.707176   0.599863
1   -0.423455   -0.700265   1.133371
2         NaN         NaN        NaN
3         NaN         NaN        NaN
4         NaN         NaN        NaN
5         NaN         NaN        NaN

Data Frame with Forward Fill:
         col1        col2        col3
0    1.311620   -0.707176    0.599863
1   -0.423455   -0.700265    1.133371
2   -0.423455   -0.700265    1.133371
3   -0.423455   -0.700265    1.133371
4   -0.423455   -0.700265    1.133371
5   -0.423455   -0.700265    1.133371

Note - Die letzten vier Zeilen sind gepolstert.

Beschränkungen beim Befüllen beim Neuindizieren

Das Argument limit bietet zusätzliche Kontrolle über das Füllen während der Neuindizierung. Limit gibt die maximale Anzahl aufeinanderfolgender Übereinstimmungen an. Betrachten wir das folgende Beispiel, um dasselbe zu verstehen:

Beispiel

import pandas as pd
import numpy as np
 
df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])

# Padding NAN's
print df2.reindex_like(df1)

# Now Fill the NAN's with preceding Values
print ("Data Frame with Forward Fill limiting to 1:")
print df2.reindex_like(df1,method='ffill',limit=1)

Es ist output ist wie folgt -

col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2         NaN         NaN         NaN
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

Data Frame with Forward Fill limiting to 1:
         col1        col2        col3
0    0.247784    2.128727    0.702576
1   -0.055713   -0.021732   -0.174577
2   -0.055713   -0.021732   -0.174577
3         NaN         NaN         NaN
4         NaN         NaN         NaN
5         NaN         NaN         NaN

Note- Beachten Sie, dass nur die 7. Reihe von der vorhergehenden 6. Reihe ausgefüllt wird. Dann bleiben die Zeilen unverändert.

Umbenennung

Mit der Methode rename () können Sie eine Achse basierend auf einer Zuordnung (einem Diktat oder einer Serie) oder einer beliebigen Funktion neu beschriften.

Betrachten wir das folgende Beispiel, um dies zu verstehen:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print df1

print ("After renaming the rows and columns:")
print df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},
index = {0 : 'apple', 1 : 'banana', 2 : 'durian'})

Es ist output ist wie folgt -

col1        col2        col3
0    0.486791    0.105759    1.540122
1   -0.990237    1.007885   -0.217896
2   -0.483855   -1.645027   -1.194113
3   -0.122316    0.566277   -0.366028
4   -0.231524   -0.721172   -0.112007
5    0.438810    0.000225    0.435479

After renaming the rows and columns:
                c1          c2        col3
apple     0.486791    0.105759    1.540122
banana   -0.990237    1.007885   -0.217896
durian   -0.483855   -1.645027   -1.194113
3        -0.122316    0.566277   -0.366028
4        -0.231524   -0.721172   -0.112007
5         0.438810    0.000225    0.435479

Die Methode rename () bietet eine inplacebenannter Parameter, der standardmäßig False ist und die zugrunde liegenden Daten kopiert. Besteheninplace=True um die Daten an Ort und Stelle umzubenennen.

Das Verhalten der grundlegenden Iteration über Pandas-Objekte hängt vom Typ ab. Wenn Sie über eine Serie iterieren, wird dies als Array-ähnlich angesehen, und die grundlegende Iteration erzeugt die Werte. Andere Datenstrukturen wie DataFrame und Panel folgen demdict-like Konvention der Iteration über die keys der Objekte.

Kurz gesagt, grundlegende Iteration (z i im Objekt) erzeugt -

  • Series - Werte

  • DataFrame - Spaltenbeschriftungen

  • Panel - Artikeletiketten

Iterieren eines DataFrame

Das Iterieren eines DataFrame gibt Spaltennamen an. Betrachten wir das folgende Beispiel, um dasselbe zu verstehen.

import pandas as pd
import numpy as np
 
N=20
df = pd.DataFrame({
   'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
   'x': np.linspace(0,stop=N-1,num=N),
   'y': np.random.rand(N),
   'C': np.random.choice(['Low','Medium','High'],N).tolist(),
   'D': np.random.normal(100, 10, size=(N)).tolist()
   })

for col in df:
   print col

Es ist output ist wie folgt -

A
C
D
x
y

Um die Zeilen des DataFrame zu durchlaufen, können Sie die folgenden Funktionen verwenden:

  • iteritems() - um über die (Schlüssel-, Wert-) Paare zu iterieren

  • iterrows() - Durchlaufen Sie die Zeilen als (Index-, Serien-) Paare

  • itertuples() - als Namedtuples über die Zeilen iterieren

iteritems ()

Iteriert über jede Spalte als Schlüssel, Wertepaar mit Beschriftung als Schlüssel und Spaltenwert als Serienobjekt.

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(4,3),columns=['col1','col2','col3'])
for key,value in df.iteritems():
   print key,value

Es ist output ist wie folgt -

col1 0    0.802390
1    0.324060
2    0.256811
3    0.839186
Name: col1, dtype: float64

col2 0    1.624313
1   -1.033582
2    1.796663
3    1.856277
Name: col2, dtype: float64

col3 0   -0.022142
1   -0.230820
2    1.160691
3   -0.830279
Name: col3, dtype: float64

Beachten Sie, dass jede Spalte separat als Schlüssel-Wert-Paar in einer Reihe iteriert wird.

iterrows ()

iterrows () gibt den Iterator zurück, der jeden Indexwert zusammen mit einer Reihe mit den Daten in jeder Zeile liefert.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
for row_index,row in df.iterrows():
   print row_index,row

Es ist output ist wie folgt -

0  col1    1.529759
   col2    0.762811
   col3   -0.634691
Name: 0, dtype: float64

1  col1   -0.944087
   col2    1.420919
   col3   -0.507895
Name: 1, dtype: float64
 
2  col1   -0.077287
   col2   -0.858556
   col3   -0.663385
Name: 2, dtype: float64
3  col1    -1.638578
   col2     0.059866
   col3     0.493482
Name: 3, dtype: float64

Note - Weil iterrows()Durchlaufen Sie die Zeilen, ohne den Datentyp in der Zeile beizubehalten. 0,1,2 sind die Zeilenindizes und col1, col2, col3 sind Spaltenindizes.

itertuples ()

Die Methode itertuples () gibt einen Iterator zurück, der für jede Zeile im DataFrame ein benanntes Tupel liefert. Das erste Element des Tupels ist der entsprechende Indexwert der Zeile, während die verbleibenden Werte die Zeilenwerte sind.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
for row in df.itertuples():
    print row

Es ist output ist wie folgt -

Pandas(Index=0, col1=1.5297586201375899, col2=0.76281127433814944, col3=-
0.6346908238310438)

Pandas(Index=1, col1=-0.94408735763808649, col2=1.4209186418359423, col3=-
0.50789517967096232)

Pandas(Index=2, col1=-0.07728664756791935, col2=-0.85855574139699076, col3=-
0.6633852507207626)

Pandas(Index=3, col1=0.65734942534106289, col2=-0.95057710432604969,
col3=0.80344487462316527)

Note- Versuchen Sie nicht, während der Iteration ein Objekt zu ändern. Das Iterieren ist zum Lesen gedacht und der Iterator gibt eine Kopie des Originalobjekts (eine Ansicht) zurück, sodass sich die Änderungen nicht auf das Originalobjekt auswirken.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])

for index, row in df.iterrows():
   row['a'] = 10
print df

Es ist output ist wie folgt -

col1       col2       col3
0  -1.739815   0.735595  -0.295589
1   0.635485   0.106803   1.527922
2  -0.939064   0.547095   0.038585
3  -1.016509  -0.116580  -0.523158

Beachten Sie, keine Änderungen reflektiert.

In Pandas gibt es zwei Arten der Sortierung. Sie sind -

  • Nach Etikett
  • Nach tatsächlichem Wert

Betrachten wir ein Beispiel mit einer Ausgabe.

import pandas as pd
import numpy as np

unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
mns=['col2','col1'])
print unsorted_df

Es ist output ist wie folgt -

col2       col1
1  -2.063177   0.537527
4   0.142932  -0.684884
6   0.012667  -0.389340
2  -0.548797   1.848743
3  -1.044160   0.837381
5   0.385605   1.300185
9   1.031425  -1.002967
8  -0.407374  -0.435142
0   2.237453  -1.067139
7  -1.445831  -1.701035

Im unsorted_df, das labels und die valuessind unsortiert. Lassen Sie uns sehen, wie diese sortiert werden können.

Nach Etikett

Verwendung der sort_index()Durch Übergeben der Achsenargumente und der Sortierreihenfolge kann DataFrame sortiert werden. Standardmäßig erfolgt die Sortierung nach Zeilenbeschriftungen in aufsteigender Reihenfolge.

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
   mns = ['col2','col1'])

sorted_df=unsorted_df.sort_index()
print sorted_df

Es ist output ist wie folgt -

col2       col1
0   0.208464   0.627037
1   0.641004   0.331352
2  -0.038067  -0.464730
3  -0.638456  -0.021466
4   0.014646  -0.737438
5  -0.290761  -1.669827
6  -0.797303  -0.018737
7   0.525753   1.628921
8  -0.567031   0.775951
9   0.060724  -0.322425

Sortierreihenfolge

Durch Übergeben des Booleschen Werts an den aufsteigenden Parameter kann die Reihenfolge der Sortierung gesteuert werden. Betrachten wir das folgende Beispiel, um dasselbe zu verstehen.

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
   mns = ['col2','col1'])

sorted_df = unsorted_df.sort_index(ascending=False)
print sorted_df

Es ist output ist wie folgt -

col2        col1
9    0.825697    0.374463
8   -1.699509    0.510373
7   -0.581378    0.622958
6   -0.202951    0.954300
5   -1.289321   -1.551250
4    1.302561    0.851385
3   -0.157915   -0.388659
2   -1.222295    0.166609
1    0.584890   -0.291048
0    0.668444   -0.061294

Sortieren Sie die Spalten

Durch Übergeben des Achsenarguments mit dem Wert 0 oder 1 kann die Sortierung nach den Spaltenbeschriftungen erfolgen. Standardmäßig ist Achse = 0, nach Zeile sortieren. Betrachten wir das folgende Beispiel, um dasselbe zu verstehen.

import pandas as pd
import numpy as np
 
unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],colu
   mns = ['col2','col1'])
 
sorted_df=unsorted_df.sort_index(axis=1)

print sorted_df

Es ist output ist wie folgt -

col1        col2
1   -0.291048    0.584890
4    0.851385    1.302561
6    0.954300   -0.202951
2    0.166609   -1.222295
3   -0.388659   -0.157915
5   -1.551250   -1.289321
9    0.374463    0.825697
8    0.510373   -1.699509
0   -0.061294    0.668444
7    0.622958   -0.581378

Nach Wert

Wie die Indexsortierung, sort_values()ist die Methode zum Sortieren nach Werten. Es akzeptiert ein 'by'-Argument, das den Spaltennamen des DataFrame verwendet, mit dem die Werte sortiert werden sollen.

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
   sorted_df = unsorted_df.sort_values(by='col1')

print sorted_df

Es ist output ist wie folgt -

col1  col2
1    1    3
2    1    2
3    1    4
0    2    1

Beachten Sie, dass die Werte für col1 sortiert sind und sich der jeweilige Wert für col2 und der Zeilenindex zusammen mit col1 ändern. Sie sehen also unsortiert aus.

'by' Argument nimmt eine Liste von Spaltenwerten.

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
   sorted_df = unsorted_df.sort_values(by=['col1','col2'])

print sorted_df

Es ist output ist wie folgt -

col1 col2
2   1   2
1   1   3
3   1   4
0   2   1

Sortieralgorithmus

sort_values()bietet eine Möglichkeit, den Algorithmus aus Mergesort, Heapsort und Quicksort auszuwählen. Mergesort ist der einzige stabile Algorithmus.

import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1' ,kind='mergesort')

print sorted_df

Es ist output ist wie folgt -

col1 col2
1    1    3
2    1    2
3    1    4
0    2    1

In diesem Kapitel werden wir die Zeichenfolgenoperationen mit unserer Basisreihe / unserem Index diskutieren. In den folgenden Kapiteln erfahren Sie, wie Sie diese Zeichenfolgenfunktionen auf den DataFrame anwenden.

Pandas bietet eine Reihe von Zeichenfolgenfunktionen, die die Bearbeitung von Zeichenfolgendaten vereinfachen. Am wichtigsten ist, dass diese Funktionen fehlende / NaN-Werte ignorieren (oder ausschließen).

Fast alle diese Methoden funktionieren mit Python-String-Funktionen (siehe: https://docs.python.org/3/library/stdtypes.html#string-methods). Konvertieren Sie also das Serienobjekt in ein Zeichenfolgenobjekt und führen Sie die Operation aus.

Lassen Sie uns nun sehen, wie jede Operation ausgeführt wird.

Sr.Nr. Bedienungsanleitung
1

lower()

Konvertiert Zeichenfolgen in der Serie / im Index in Kleinbuchstaben.

2

upper()

Konvertiert Zeichenfolgen in der Serie / im Index in Großbuchstaben.

3

len()

Berechnet die Stringlänge ().

4

strip()

Hilft dabei, Leerzeichen (einschließlich Zeilenumbrüche) von beiden Zeichenfolgen in der Reihe / im Index von beiden Seiten zu entfernen.

5

split(' ')

Teilt jede Zeichenfolge mit dem angegebenen Muster.

6

cat(sep=' ')

Verkettet die Serien- / Indexelemente mit dem angegebenen Trennzeichen.

7

get_dummies()

Gibt den DataFrame mit One-Hot-Encoded-Werten zurück.

8

contains(pattern)

Gibt für jedes Element einen booleschen Wert True zurück, wenn die Teilzeichenfolge im Element enthalten ist, andernfalls False.

9

replace(a,b)

Ersetzt den Wert a mit dem Wert b.

10

repeat(value)

Wiederholt jedes Element mit der angegebenen Anzahl von Malen.

11

count(pattern)

Gibt die Anzahl der Erscheinungen des Musters in jedem Element zurück.

12

startswith(pattern)

Gibt true zurück, wenn das Element in der Serie / im Index mit dem Muster beginnt.

13

endswith(pattern)

Gibt true zurück, wenn das Element in der Reihe / im Index mit dem Muster endet.

14

find(pattern)

Gibt die erste Position des ersten Auftretens des Musters zurück.

15

findall(pattern)

Gibt eine Liste aller Vorkommen des Musters zurück.

16

swapcase

Vertauscht das Gehäuse unten / oben.

17

islower()

Überprüft, ob alle Zeichen in jeder Zeichenfolge in der Reihe / im Index in Kleinbuchstaben geschrieben sind oder nicht. Gibt Boolean zurück

18

isupper()

Überprüft, ob alle Zeichen in jeder Zeichenfolge in der Reihe / im Index in Großbuchstaben geschrieben sind oder nicht. Gibt Boolean zurück.

19

isnumeric()

Überprüft, ob alle Zeichen in jeder Zeichenfolge in der Serie / im Index numerisch sind. Gibt Boolean zurück.

Lassen Sie uns nun eine Reihe erstellen und sehen, wie alle oben genannten Funktionen funktionieren.

import pandas as pd
import numpy as np

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])

print s

Es ist output ist wie folgt -

0            Tom
1   William Rick
2           John
3        Alber@t
4            NaN
5           1234
6    Steve Smith
dtype: object

niedriger()

import pandas as pd
import numpy as np

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])

print s.str.lower()

Es ist output ist wie folgt -

0            tom
1   william rick
2           john
3        alber@t
4            NaN
5           1234
6    steve smith
dtype: object

Oberer, höher()

import pandas as pd
import numpy as np

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])

print s.str.upper()

Es ist output ist wie folgt -

0            TOM
1   WILLIAM RICK
2           JOHN
3        ALBER@T
4            NaN
5           1234
6    STEVE SMITH
dtype: object

len ()

import pandas as pd
import numpy as np

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveSmith'])
print s.str.len()

Es ist output ist wie folgt -

0    3.0
1   12.0
2    4.0
3    7.0
4    NaN
5    4.0
6   10.0
dtype: float64

Streifen()

import pandas as pd
import numpy as np
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("After Stripping:")
print s.str.strip()

Es ist output ist wie folgt -

0            Tom
1   William Rick
2           John
3        Alber@t
dtype: object

After Stripping:
0            Tom
1   William Rick
2           John
3        Alber@t
dtype: object

Split (Muster)

import pandas as pd
import numpy as np
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("Split Pattern:")
print s.str.split(' ')

Es ist output ist wie folgt -

0            Tom
1   William Rick
2           John
3        Alber@t
dtype: object

Split Pattern:
0   [Tom, , , , , , , , , , ]
1   [, , , , , William, Rick]
2   [John]
3   [Alber@t]
dtype: object

Katze (sep = Muster)

import pandas as pd
import numpy as np

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.cat(sep='_')

Es ist output ist wie folgt -

Tom _ William Rick_John_Alber@t

get_dummies ()

import pandas as pd
import numpy as np

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.get_dummies()

Es ist output ist wie folgt -

William Rick   Alber@t   John   Tom
0             0         0      0     1
1             1         0      0     0
2             0         0      1     0
3             0         1      0     0

enthält ()

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.contains(' ')

Es ist output ist wie folgt -

0   True
1   True
2   False
3   False
dtype: bool

ersetzen (a, b)

import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print s
print ("After replacing @ with $:") print s.str.replace('@','$')

Es ist output ist wie folgt -

0   Tom
1   William Rick
2   John
3   Alber@t
dtype: object

After replacing @ with $: 0 Tom 1 William Rick 2 John 3 Alber$t
dtype: object

wiederholen (Wert)

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.repeat(2)

Es ist output ist wie folgt -

0   Tom            Tom
1   William Rick   William Rick
2                  JohnJohn
3                  Alber@tAlber@t
dtype: object

Anzahl (Muster)

import pandas as pd
 
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print ("The number of 'm's in each string:")
print s.str.count('m')

Es ist output ist wie folgt -

The number of 'm's in each string:
0    1
1    1
2    0
3    0

Start mit (Muster)

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print ("Strings that start with 'T':")
print s.str. startswith ('T')

Es ist output ist wie folgt -

0  True
1  False
2  False
3  False
dtype: bool

endet mit (Muster)

import pandas as pd
s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])
print ("Strings that end with 't':")
print s.str.endswith('t')

Es ist output ist wie folgt -

Strings that end with 't':
0  False
1  False
2  False
3  True
dtype: bool

find (Muster)

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.find('e')

Es ist output ist wie folgt -

0  -1
1  -1
2  -1
3   3
dtype: int64

"-1" zeigt an, dass im Element kein solches Muster verfügbar ist.

findall (Muster)

import pandas as pd

s = pd.Series(['Tom ', ' William Rick', 'John', 'Alber@t'])

print s.str.findall('e')

Es ist output ist wie folgt -

0 []
1 []
2 []
3 [e]
dtype: object

Die Nullliste ([]) zeigt an, dass im Element kein solches Muster verfügbar ist.

Swapcase ()

import pandas as pd

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])
print s.str.swapcase()

Es ist output ist wie folgt -

0  tOM
1  wILLIAM rICK
2  jOHN
3  aLBER@T
dtype: object

ist tiefer()

import pandas as pd

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])
print s.str.islower()

Es ist output ist wie folgt -

0  False
1  False
2  False
3  False
dtype: bool

isupper ()

import pandas as pd

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])

print s.str.isupper()

Es ist output ist wie folgt -

0  False
1  False
2  False
3  False
dtype: bool

isnumerisch ()

import pandas as pd

s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t'])

print s.str.isnumeric()

Es ist output ist wie folgt -

0  False
1  False
2  False
3  False
dtype: bool

Pandas bieten eine API, um einige Aspekte ihres Verhaltens anzupassen. Die Anzeige wird hauptsächlich verwendet.

Die API besteht aus fünf relevanten Funktionen. Sie sind -

  • get_option()
  • set_option()
  • reset_option()
  • describe_option()
  • option_context()

Lassen Sie uns nun verstehen, wie die Funktionen funktionieren.

get_option (param)

get_option verwendet einen einzelnen Parameter und gibt den in der folgenden Ausgabe angegebenen Wert zurück -

display.max_rows

Zeigt die Standardwertzahl an. Der Interpreter liest diesen Wert und zeigt die Zeilen mit diesem Wert als Obergrenze für die Anzeige an.

import pandas as pd
print pd.get_option("display.max_rows")

Es ist output ist wie folgt -

60

display.max_columns

Zeigt die Standardwertzahl an. Der Interpreter liest diesen Wert und zeigt die Zeilen mit diesem Wert als Obergrenze für die Anzeige an.

import pandas as pd
print pd.get_option("display.max_columns")

Es ist output ist wie folgt -

20

Hier sind 60 und 20 die Standardwerte für die Konfigurationsparameter.

set_option (param, value)

set_option verwendet zwei Argumente und setzt den Wert wie unten gezeigt auf den Parameter -

display.max_rows

Verwenden von set_option()können wir die Standardanzahl der anzuzeigenden Zeilen ändern.

import pandas as pd

pd.set_option("display.max_rows",80)

print pd.get_option("display.max_rows")

Es ist output ist wie folgt -

80

display.max_columns

Verwenden von set_option()können wir die Standardanzahl der anzuzeigenden Zeilen ändern.

import pandas as pd

pd.set_option("display.max_columns",30)

print pd.get_option("display.max_columns")

Es ist output ist wie folgt -

30

reset_option (param)

reset_option Nimmt ein Argument und setzt den Wert auf den Standardwert zurück.

display.max_rows

Mit reset_option () können wir den Wert auf die Standardanzahl der anzuzeigenden Zeilen zurücksetzen.

import pandas as pd

pd.reset_option("display.max_rows")
print pd.get_option("display.max_rows")

Es ist output ist wie folgt -

60

description_option (param)

describe_option druckt die Beschreibung des Arguments.

display.max_rows

Mit reset_option () können wir den Wert auf die Standardanzahl der anzuzeigenden Zeilen zurücksetzen.

import pandas as pd
pd.describe_option("display.max_rows")

Es ist output ist wie folgt -

display.max_rows : int
   If max_rows is exceeded, switch to truncate view. Depending on
   'large_repr', objects are either centrally truncated or printed as
   a summary view. 'None' value means unlimited.

   In case python/IPython is running in a terminal and `large_repr`
   equals 'truncate' this can be set to 0 and pandas will auto-detect
   the height of the terminal and print a truncated object which fits
   the screen height. The IPython notebook, IPython qtconsole, or
   IDLE do not run in a terminal and hence it is not possible to do
   correct auto-detection.
   [default: 60] [currently: 60]

option_context ()

Mit dem Kontextmanager option_context wird die Option in festgelegt with statementvorübergehend. Optionswerte werden beim Beenden von automatisch wiederhergestelltwith block - -

display.max_rows

Mit option_context () können wir den Wert vorübergehend festlegen.

import pandas as pd
with pd.option_context("display.max_rows",10):
   print(pd.get_option("display.max_rows"))
   print(pd.get_option("display.max_rows"))

Es ist output ist wie folgt -

10
10

Siehe den Unterschied zwischen der ersten und der zweiten Druckanweisung. Die erste Anweisung gibt den von festgelegten Wert ausoption_context() das ist vorübergehend innerhalb der with contextselbst. Nach demwith contextDie zweite Druckanweisung gibt den konfigurierten Wert aus.

Häufig verwendete Parameter

Sr.Nr. Parameter & Beschreibung
1

display.max_rows

Zeigt die maximale Anzahl der anzuzeigenden Zeilen an

2

2 display.max_columns

Zeigt die maximale Anzahl der anzuzeigenden Spalten an

3

display.expand_frame_repr

Zeigt DataFrames zum Strecken von Seiten an

4

display.max_colwidth

Zeigt die maximale Spaltenbreite an

5

display.precision

Zeigt die Genauigkeit für Dezimalzahlen an

In diesem Kapitel werden wir diskutieren, wie man das Datum schneidet und würfelt und im Allgemeinen die Teilmenge des Pandas-Objekts erhält.

Die Python- und NumPy-Indexierungsoperatoren "[]" und der Attributoperator "." Bieten Sie schnellen und einfachen Zugriff auf Pandas-Datenstrukturen in einer Vielzahl von Anwendungsfällen. Da jedoch die Art der Daten, auf die zugegriffen werden soll, nicht im Voraus bekannt ist, hat die direkte Verwendung von Standardoperatoren einige Optimierungsgrenzen. Für den Produktionscode empfehlen wir, die in diesem Kapitel erläuterten optimierten Pandas-Datenzugriffsmethoden zu nutzen.

Pandas unterstützt jetzt drei Arten der Mehrachsen-Indizierung. Die drei Typen sind in der folgenden Tabelle aufgeführt -

Sr.Nr. Indizierung & Beschreibung
1

.loc()

Etikettenbasiert

2

.iloc()

Ganzzahl basiert

3

.ix()

Sowohl Label- als auch Integer-basiert

.loc ()

Pandas bieten verschiedene Methoden, um rein zu haben label based indexing. Beim Schneiden wird auch die Startgrenze berücksichtigt. Ganzzahlen sind gültige Beschriftungen, beziehen sich jedoch auf die Beschriftung und nicht auf die Position.

.loc() hat mehrere Zugriffsmethoden wie -

  • Eine einzelne skalare Bezeichnung
  • Eine Liste der Etiketten
  • Ein Slice-Objekt
  • Ein boolesches Array

locNimmt zwei Einzel- / Listen- / Bereichsoperatoren, die durch ',' getrennt sind. Die erste gibt die Zeile und die zweite die Spalten an.

Beispiel 1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

#select all rows for a specific column
print df.loc[:,'A']

Es ist output ist wie folgt -

a   0.391548
b  -0.070649
c  -0.317212
d  -2.162406
e   2.202797
f   0.613709
g   1.050559
h   1.122680
Name: A, dtype: float64

Beispiel 2

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select all rows for multiple columns, say list[]
print df.loc[:,['A','C']]

Es ist output ist wie folgt -

A           C
a    0.391548    0.745623
b   -0.070649    1.620406
c   -0.317212    1.448365
d   -2.162406   -0.873557
e    2.202797    0.528067
f    0.613709    0.286414
g    1.050559    0.216526
h    1.122680   -1.621420

Beispiel 3

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select few rows for multiple columns, say list[]
print df.loc[['a','b','f','h'],['A','C']]

Es ist output ist wie folgt -

A          C
a   0.391548   0.745623
b  -0.070649   1.620406
f   0.613709   0.286414
h   1.122680  -1.621420

Beispiel 4

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# Select range of rows for all columns
print df.loc['a':'h']

Es ist output ist wie folgt -

A           B          C          D
a    0.391548   -0.224297   0.745623   0.054301
b   -0.070649   -0.880130   1.620406   1.419743
c   -0.317212   -1.929698   1.448365   0.616899
d   -2.162406    0.614256  -0.873557   1.093958
e    2.202797   -2.315915   0.528067   0.612482
f    0.613709   -0.157674   0.286414  -0.500517
g    1.050559   -2.272099   0.216526   0.928449
h    1.122680    0.324368  -1.621420  -0.741470

Beispiel 5

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])

# for getting values with a boolean array
print df.loc['a']>0

Es ist output ist wie folgt -

A  False
B  True
C  False
D  False
Name: a, dtype: bool

.iloc ()

Pandas bieten verschiedene Methoden, um eine rein ganzzahlige Indizierung zu erhalten. Wie Python und Numpy sind dies0-based Indizierung.

Die verschiedenen Zugriffsmethoden sind wie folgt:

  • Eine ganze Zahl
  • Eine Liste von ganzen Zahlen
  • Ein Wertebereich

Beispiel 1

# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# select all rows for a specific column
print df.iloc[:4]

Es ist output ist wie folgt -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Integer slicing
print df.iloc[:4]
print df.iloc[1:5, 2:4]

Es ist output ist wie folgt -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

           C          D
1  -0.813012   0.631615
2   0.025070   0.230806
3   0.826977  -0.026251
4   1.423332   1.130568

Beispiel 3

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Slicing through list of values
print df.iloc[[1, 3, 5], [1, 3]]
print df.iloc[1:3, :]
print df.iloc[:,1:3]

Es ist output ist wie folgt -

B           D
1   0.890791    0.631615
3  -1.284314   -0.026251
5  -0.512888   -0.518930

           A           B           C           D
1  -0.685354    0.890791   -0.813012    0.631615
2  -0.783192   -0.531378    0.025070    0.230806

           B           C
0   0.256239   -1.270702
1   0.890791   -0.813012
2  -0.531378    0.025070
3  -1.284314    0.826977
4  -0.460729    1.423332
5  -0.512888    0.581409
6  -1.204853    0.098060
7  -0.947857    0.641358

.ix ()

Neben reinen Label-basierten und Integer-basierten bietet Pandas eine Hybridmethode zum Auswählen und Unterteilen des Objekts mit dem Operator .ix ().

Beispiel 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

# Integer slicing
print df.ix[:4]

Es ist output ist wie folgt -

A          B           C           D
0   0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070    0.230806
3   0.539042  -1.284314    0.826977   -0.026251

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Index slicing
print df.ix[:,'A']

Es ist output ist wie folgt -

0   0.699435
1  -0.685354
2  -0.783192
3   0.539042
4  -1.044209
5  -1.415411
6   1.062095
7   0.994204
Name: A, dtype: float64

Verwendung von Notationen

Das Abrufen von Werten aus dem Pandas-Objekt mit der Mehrachsen-Indizierung verwendet die folgende Notation:

Objekt Indexer Rückgabetyp
Serie s.loc [Indexer] Skalarwert
DataFrame df.loc [row_index, col_index] Serienobjekt
Panel p.loc [item_index, major_index, minor_index] p.loc [item_index, major_index, minor_index]

Note − .iloc() & .ix() Wendet die gleichen Indizierungsoptionen und den gleichen Rückgabewert an.

Lassen Sie uns nun sehen, wie jede Operation für das DataFrame-Objekt ausgeführt werden kann. Wir werden den grundlegenden Indexierungsoperator '[]' verwenden -

Beispiel 1

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df['A']

Es ist output ist wie folgt -

0  -0.478893
1   0.391931
2   0.336825
3  -1.055102
4  -0.165218
5  -0.328641
6   0.567721
7  -0.759399
Name: A, dtype: float64

Note - Wir können eine Liste von Werten an [] übergeben, um diese Spalten auszuwählen.

Beispiel 2

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

print df[['A','B']]

Es ist output ist wie folgt -

A           B
0  -0.478893   -0.606311
1   0.391931   -0.949025
2   0.336825    0.093717
3  -1.055102   -0.012944
4  -0.165218    1.550310
5  -0.328641   -0.226363
6   0.567721   -0.312585
7  -0.759399   -0.372696

Beispiel 3

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[2:2]

Es ist output ist wie folgt -

Columns: [A, B, C, D]
Index: []

Attributzugriff

Spalten können mit dem Attributoperator '.' Ausgewählt werden.

Beispiel

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])

print df.A

Es ist output ist wie folgt -

0   -0.478893
1    0.391931
2    0.336825
3   -1.055102
4   -0.165218
5   -0.328641
6    0.567721
7   -0.759399
Name: A, dtype: float64

Statistische Methoden helfen beim Verständnis und der Analyse des Verhaltens von Daten. Wir werden nun einige statistische Funktionen lernen, die wir auf Pandas-Objekte anwenden können.

Prozentänderung

Serien, DatFrames und Panel haben alle die Funktion pct_change(). Diese Funktion vergleicht jedes Element mit seinem vorherigen Element und berechnet den Änderungsprozentsatz.

import pandas as pd
import numpy as np
s = pd.Series([1,2,3,4,5,4])
print s.pct_change()

df = pd.DataFrame(np.random.randn(5, 2))
print df.pct_change()

Es ist output ist wie folgt -

0        NaN
1   1.000000
2   0.500000
3   0.333333
4   0.250000
5  -0.200000
dtype: float64

            0          1
0         NaN        NaN
1  -15.151902   0.174730
2  -0.746374   -1.449088
3  -3.582229   -3.165836
4   15.601150  -1.860434

Standardmäßig ist die pct_change()arbeitet mit Spalten; Wenn Sie dieselbe Zeile weise anwenden möchten, verwenden Sieaxis=1() Streit.

Kovarianz

Die Kovarianz wird auf Seriendaten angewendet. Das Serienobjekt verfügt über eine Methode cov, um die Kovarianz zwischen Serienobjekten zu berechnen. NA wird automatisch ausgeschlossen.

Cov-Serie

import pandas as pd
import numpy as np
s1 = pd.Series(np.random.randn(10))
s2 = pd.Series(np.random.randn(10))
print s1.cov(s2)

Es ist output ist wie folgt -

-0.12978405324

Die Kovarianzmethode wird berechnet, wenn sie auf einen DataFrame angewendet wird cov zwischen allen Spalten.

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
print frame['a'].cov(frame['b'])
print frame.cov()

Es ist output ist wie folgt -

-0.58312921152741437

           a           b           c           d            e
a   1.780628   -0.583129   -0.185575    0.003679    -0.136558
b  -0.583129    1.297011    0.136530   -0.523719     0.251064
c  -0.185575    0.136530    0.915227   -0.053881    -0.058926
d   0.003679   -0.523719   -0.053881    1.521426    -0.487694
e  -0.136558    0.251064   -0.058926   -0.487694     0.960761

Note - Beachten Sie die cov zwischen a und b Spalte in der ersten Anweisung und das gleiche ist der Wert, der von cov auf DataFrame zurückgegeben wird.

Korrelation

Die Korrelation zeigt die lineare Beziehung zwischen zwei beliebigen Wertearrays (Reihen). Es gibt mehrere Methoden zur Berechnung der Korrelation wie Pearson (Standard), Spearman und Kendall.

import pandas as pd
import numpy as np
frame = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])

print frame['a'].corr(frame['b'])
print frame.corr()

Es ist output ist wie folgt -

-0.383712785514

           a          b          c          d           e
a   1.000000  -0.383713  -0.145368   0.002235   -0.104405
b  -0.383713   1.000000   0.125311  -0.372821    0.224908
c  -0.145368   0.125311   1.000000  -0.045661   -0.062840
d   0.002235  -0.372821  -0.045661   1.000000   -0.403380
e  -0.104405   0.224908  -0.062840  -0.403380    1.000000

Wenn im DataFrame eine nicht numerische Spalte vorhanden ist, wird diese automatisch ausgeschlossen.

Datenranking

Das Datenranking erzeugt ein Ranking für jedes Element im Array von Elementen. Weist bei Gleichstand den mittleren Rang zu.

import pandas as pd
import numpy as np

s = pd.Series(np.random.np.random.randn(5), index=list('abcde'))
s['d'] = s['b'] # so there's a tie
print s.rank()

Es ist output ist wie folgt -

a  1.0
b  3.5
c  2.0
d  3.5
e  5.0
dtype: float64

Der Rang nimmt optional einen aufsteigenden Parameter an, der standardmäßig wahr ist. Wenn false, werden die Daten umgekehrt eingestuft, wobei größeren Werten ein kleinerer Rang zugewiesen wird.

Rank unterstützt verschiedene Tie-Breaking-Methoden, die mit dem Methodenparameter - angegeben werden.

  • average - durchschnittlicher Rang der gebundenen Gruppe

  • min - niedrigster Rang in der Gruppe

  • max - höchster Rang in der Gruppe

  • first - Ränge in der Reihenfolge zugewiesen, in der sie im Array angezeigt werden

Für die Bearbeitung numerischer Daten bieten Pandas nur wenige Varianten wie Rollen, Erweitern und exponentielles Bewegen von Gewichten für Fensterstatistiken. Unter diesen sindsum, mean, median, variance, covariance, correlation, usw.

Wir werden nun lernen, wie diese auf DataFrame-Objekte angewendet werden können.

.rolling () Funktion

Diese Funktion kann auf eine Reihe von Daten angewendet werden. Präzisiere daswindow=n argumentieren und die entsprechende statistische Funktion darüber anwenden.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df.rolling(window=3).mean()

Es ist output ist wie folgt -

A           B           C           D
2000-01-01        NaN         NaN         NaN         NaN
2000-01-02        NaN         NaN         NaN         NaN
2000-01-03   0.434553   -0.667940   -1.051718   -0.826452
2000-01-04   0.628267   -0.047040   -0.287467   -0.161110
2000-01-05   0.398233    0.003517    0.099126   -0.405565
2000-01-06   0.641798    0.656184   -0.322728    0.428015
2000-01-07   0.188403    0.010913   -0.708645    0.160932
2000-01-08   0.188043   -0.253039   -0.818125   -0.108485
2000-01-09   0.682819   -0.606846   -0.178411   -0.404127
2000-01-10   0.688583    0.127786    0.513832   -1.067156

Note - Da die Fenstergröße 3 ist, gibt es für die ersten beiden Elemente Nullen und ab dem dritten ist der Wert der Durchschnitt der n, n-1 und n-2Elemente. Somit können wir auch verschiedene Funktionen anwenden, wie oben erwähnt.

.expanding () Funktion

Diese Funktion kann auf eine Reihe von Daten angewendet werden. Präzisiere dasmin_periods=n argumentieren und die entsprechende statistische Funktion darüber anwenden.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df.expanding(min_periods=3).mean()

Es ist output ist wie folgt -

A           B           C           D
2000-01-01        NaN         NaN         NaN         NaN
2000-01-02        NaN         NaN         NaN         NaN
2000-01-03   0.434553   -0.667940   -1.051718   -0.826452
2000-01-04   0.743328   -0.198015   -0.852462   -0.262547
2000-01-05   0.614776   -0.205649   -0.583641   -0.303254
2000-01-06   0.538175   -0.005878   -0.687223   -0.199219
2000-01-07   0.505503   -0.108475   -0.790826   -0.081056
2000-01-08   0.454751   -0.223420   -0.671572   -0.230215
2000-01-09   0.586390   -0.206201   -0.517619   -0.267521
2000-01-10   0.560427   -0.037597   -0.399429   -0.376886

.ewm () Funktion

ewmwird auf eine Reihe von Daten angewendet. Geben Sie eine der folgenden Optionen an: com, span,halflifeargumentieren und die entsprechende statistische Funktion darüber anwenden. Es weist die Gewichte exponentiell zu.

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df.ewm(com=0.5).mean()

Es ist output ist wie folgt -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   0.865131   -0.453626   -1.137961    0.058747
2000-01-03  -0.132245   -0.807671   -0.308308   -1.491002
2000-01-04   1.084036    0.555444   -0.272119    0.480111
2000-01-05   0.425682    0.025511    0.239162   -0.153290
2000-01-06   0.245094    0.671373   -0.725025    0.163310
2000-01-07   0.288030   -0.259337   -1.183515    0.473191
2000-01-08   0.162317   -0.771884   -0.285564   -0.692001
2000-01-09   1.147156   -0.302900    0.380851   -0.607976
2000-01-10   0.600216    0.885614    0.569808   -1.110113

Fensterfunktionen werden hauptsächlich verwendet, um die Trends innerhalb der Daten grafisch zu finden, indem die Kurve geglättet wird. Wenn die alltäglichen Daten sehr unterschiedlich sind und viele Datenpunkte verfügbar sind, ist das Entnehmen der Proben und das Zeichnen eine Methode und das Anwenden der Fensterberechnungen und das Zeichnen des Diagramms auf die Ergebnisse eine andere Methode. Mit diesen Methoden können wir die Kurve oder den Trend glätten.

Sobald das Rollen, Erweitern und ewm Objekte erstellt werden, stehen verschiedene Methoden zur Verfügung, um Aggregationen an Daten durchzuführen.

Anwenden von Aggregationen auf DataFrame

Lassen Sie uns einen DataFrame erstellen und Aggregationen darauf anwenden.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])

print df
r = df.rolling(window=3,min_periods=1)
print r

Es ist output ist wie folgt -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   0.790670   -0.387854   -0.668132    0.267283
2000-01-03  -0.575523   -0.965025    0.060427   -2.179780
2000-01-04   1.669653    1.211759   -0.254695    1.429166
2000-01-05   0.100568   -0.236184    0.491646   -0.466081
2000-01-06   0.155172    0.992975   -1.205134    0.320958
2000-01-07   0.309468   -0.724053   -1.412446    0.627919
2000-01-08   0.099489   -1.028040    0.163206   -1.274331
2000-01-09   1.639500   -0.068443    0.714008   -0.565969
2000-01-10   0.326761    1.479841    0.664282   -1.361169

Rolling [window=3,min_periods=1,center=False,axis=0]

Wir können aggregieren, indem wir eine Funktion an den gesamten DataFrame übergeben oder eine Spalte über den Standard auswählen get item Methode.

Wenden Sie die Aggregation auf einen gesamten Datenrahmen an

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r.aggregate(np.sum)

Es ist output ist wie folgt -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469

                    A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469

Wenden Sie die Aggregation auf eine einzelne Spalte eines Datenrahmens an

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r['A'].aggregate(np.sum)

Es ist output ist wie folgt -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469
2000-01-01   1.088512
2000-01-02   1.879182
2000-01-03   1.303660
2000-01-04   1.884801
2000-01-05   1.194699
2000-01-06   1.925393
2000-01-07   0.565208
2000-01-08   0.564129
2000-01-09   2.048458
2000-01-10   2.065750
Freq: D, Name: A, dtype: float64

Wenden Sie die Aggregation auf mehrere Spalten eines DataFrames an

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r[['A','B']].aggregate(np.sum)

Es ist output ist wie folgt -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469
                    A           B
2000-01-01   1.088512   -0.650942
2000-01-02   1.879182   -1.038796
2000-01-03   1.303660   -2.003821
2000-01-04   1.884801   -0.141119
2000-01-05   1.194699    0.010551
2000-01-06   1.925393    1.968551
2000-01-07   0.565208    0.032738
2000-01-08   0.564129   -0.759118
2000-01-09   2.048458   -1.820537
2000-01-10   2.065750    0.383357

Wenden Sie mehrere Funktionen auf eine einzelne Spalte eines DataFrames an

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r['A'].aggregate([np.sum,np.mean])

Es ist output ist wie folgt -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469
                  sum       mean
2000-01-01   1.088512   1.088512
2000-01-02   1.879182   0.939591
2000-01-03   1.303660   0.434553
2000-01-04   1.884801   0.628267
2000-01-05   1.194699   0.398233
2000-01-06   1.925393   0.641798
2000-01-07   0.565208   0.188403
2000-01-08   0.564129   0.188043
2000-01-09   2.048458   0.682819
2000-01-10   2.065750   0.688583

Wenden Sie mehrere Funktionen auf mehrere Spalten eines DataFrames an

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r[['A','B']].aggregate([np.sum,np.mean])

Es ist output ist wie folgt -

A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   1.879182   -1.038796   -3.215581   -0.299575
2000-01-03   1.303660   -2.003821   -3.155154   -2.479355
2000-01-04   1.884801   -0.141119   -0.862400   -0.483331
2000-01-05   1.194699    0.010551    0.297378   -1.216695
2000-01-06   1.925393    1.968551   -0.968183    1.284044
2000-01-07   0.565208    0.032738   -2.125934    0.482797
2000-01-08   0.564129   -0.759118   -2.454374   -0.325454
2000-01-09   2.048458   -1.820537   -0.535232   -1.212381
2000-01-10   2.065750    0.383357    1.541496   -3.201469
                    A                      B
                  sum       mean         sum        mean
2000-01-01   1.088512   1.088512   -0.650942   -0.650942
2000-01-02   1.879182   0.939591   -1.038796   -0.519398
2000-01-03   1.303660   0.434553   -2.003821   -0.667940
2000-01-04   1.884801   0.628267   -0.141119   -0.047040
2000-01-05   1.194699   0.398233    0.010551    0.003517
2000-01-06   1.925393   0.641798    1.968551    0.656184
2000-01-07   0.565208   0.188403    0.032738    0.010913
2000-01-08   0.564129   0.188043   -0.759118   -0.253039
2000-01-09   2.048458   0.682819   -1.820537   -0.606846
2000-01-10   2.065750   0.688583    0.383357    0.127786

Wenden Sie verschiedene Funktionen auf verschiedene Spalten eines Datenrahmens an

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(3, 4),
   index = pd.date_range('1/1/2000', periods=3),
   columns = ['A', 'B', 'C', 'D'])
print df
r = df.rolling(window=3,min_periods=1)
print r.aggregate({'A' : np.sum,'B' : np.mean})

Es ist output ist wie folgt -

A          B          C         D
2000-01-01  -1.575749  -1.018105   0.317797  0.545081
2000-01-02  -0.164917  -1.361068   0.258240  1.113091
2000-01-03   1.258111   1.037941  -0.047487  0.867371
                    A          B
2000-01-01  -1.575749  -1.018105
2000-01-02  -1.740666  -1.189587
2000-01-03  -0.482555  -0.447078

Fehlende Daten sind in realen Szenarien immer ein Problem. Bereiche wie maschinelles Lernen und Data Mining sind aufgrund der schlechten Datenqualität aufgrund fehlender Werte mit schwerwiegenden Problemen bei der Genauigkeit ihrer Modellvorhersagen konfrontiert. In diesen Bereichen steht die Behandlung fehlender Werte im Vordergrund, um ihre Modelle genauer und valider zu machen.

Wann und warum fehlen Daten?

Betrachten wir eine Online-Umfrage für ein Produkt. Oft teilen die Leute nicht alle Informationen, die mit ihnen zusammenhängen. Nur wenige Menschen teilen ihre Erfahrungen, aber nicht, wie lange sie das Produkt verwenden. Nur wenige Personen teilen mit, wie lange sie das Produkt verwenden, welche Erfahrungen sie gemacht haben, aber nicht ihre Kontaktinformationen. Auf die eine oder andere Weise fehlt also immer ein Teil der Daten, und dies ist in Echtzeit sehr häufig.

Lassen Sie uns nun sehen, wie wir mit fehlenden Werten (z. B. NA oder NaN) mit Pandas umgehen können.

# import the pandas library
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df

Es ist output ist wie folgt -

one        two      three
a   0.077988   0.476149   0.965836
b        NaN        NaN        NaN
c  -0.390208  -0.551605  -2.301950
d        NaN        NaN        NaN
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g        NaN        NaN        NaN
h   0.085100   0.532791   0.887415

Mit der Neuindizierung haben wir einen DataFrame mit fehlenden Werten erstellt. In der AusgabeNaN meint Not a Number.

Überprüfen Sie, ob Werte fehlen

Um das Erkennen fehlender Werte (und über verschiedene Array-D-Typen hinweg) zu vereinfachen, bietet Pandas die isnull() und notnull() Funktionen, die auch Methoden für Serien- und DataFrame-Objekte sind -

Beispiel 1

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].isnull()

Es ist output ist wie folgt -

a  False
b  True
c  False
d  True
e  False
f  False
g  True
h  False
Name: one, dtype: bool

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].notnull()

Es ist output ist wie folgt -

a  True
b  False
c  True
d  False
e  True
f  True
g  False
h  True
Name: one, dtype: bool

Berechnungen mit fehlenden Daten

  • Beim Summieren von Daten wird NA als Null behandelt
  • Wenn die Daten alle NA sind, ist das Ergebnis NA

Beispiel 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df['one'].sum()

Es ist output ist wie folgt -

2.02357685917

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(index=[0,1,2,3,4,5],columns=['one','two'])
print df['one'].sum()

Es ist output ist wie folgt -

nan

Fehlende Daten bereinigen / füllen

Pandas bietet verschiedene Methoden zum Reinigen der fehlenden Werte. Die Fillna-Funktion kann NA-Werte auf verschiedene Weise mit Nicht-Null-Daten „füllen“, wie in den folgenden Abschnitten dargestellt.

Ersetzen Sie NaN durch einen Skalarwert

Das folgende Programm zeigt, wie Sie "NaN" durch "0" ersetzen können.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one',
'two', 'three'])

df = df.reindex(['a', 'b', 'c'])

print df
print ("NaN replaced with '0':")
print df.fillna(0)

Es ist output ist wie folgt -

one        two     three
a  -0.576991  -0.741695  0.553172
b        NaN        NaN       NaN
c   0.744328  -1.735166  1.749580

NaN replaced with '0':
         one        two     three
a  -0.576991  -0.741695  0.553172
b   0.000000   0.000000  0.000000
c   0.744328  -1.735166  1.749580

Hier füllen wir mit dem Wert Null; Stattdessen können wir auch mit jedem anderen Wert füllen.

Füllen Sie NA vorwärts und rückwärts

Mit den im Kapitel ReIndexing beschriebenen Füllkonzepten werden die fehlenden Werte gefüllt.

Sr.Nr. Methode & Aktion
1

pad/fill

Füllmethoden Weiterleiten

2

bfill/backfill

Füllmethoden rückwärts

Beispiel 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df.fillna(method='pad')

Es ist output ist wie folgt -

one        two      three
a   0.077988   0.476149   0.965836
b   0.077988   0.476149   0.965836
c  -0.390208  -0.551605  -2.301950
d  -0.390208  -0.551605  -2.301950
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g  -0.930230  -0.670473   1.146615
h   0.085100   0.532791   0.887415

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])

print df.fillna(method='backfill')

Es ist output ist wie folgt -

one        two      three
a   0.077988   0.476149   0.965836
b  -0.390208  -0.551605  -2.301950
c  -0.390208  -0.551605  -2.301950
d  -2.000303  -0.788201   1.510072
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
g   0.085100   0.532791   0.887415
h   0.085100   0.532791   0.887415

Fehlende Werte löschen

Wenn Sie die fehlenden Werte einfach ausschließen möchten, verwenden Sie die dropna Funktion zusammen mit dem axisStreit. Standardmäßig ist Achse = 0, dh entlang der Zeile. Wenn also ein Wert innerhalb einer Zeile NA ist, wird die gesamte Zeile ausgeschlossen.

Beispiel 1

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna()

Es ist output ist wie folgt -

one        two      three
a   0.077988   0.476149   0.965836
c  -0.390208  -0.551605  -2.301950
e  -2.000303  -0.788201   1.510072
f  -0.930230  -0.670473   1.146615
h   0.085100   0.532791   0.887415

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f',
'h'],columns=['one', 'two', 'three'])

df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print df.dropna(axis=1)

Es ist output ist wie folgt -

Empty DataFrame
Columns: [ ]
Index: [a, b, c, d, e, f, g, h]

Ersetzen Sie fehlende (oder) generische Werte

Oft müssen wir einen generischen Wert durch einen bestimmten Wert ersetzen. Wir können dies erreichen, indem wir die Ersetzungsmethode anwenden.

Das Ersetzen von NA durch einen Skalarwert entspricht dem Verhalten von fillna() Funktion.

Beispiel 1

import pandas as pd
import numpy as np

df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})

print df.replace({1000:10,2000:60})

Es ist output ist wie folgt -

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60

Beispiel 2

import pandas as pd
import numpy as np

df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]})
print df.replace({1000:10,2000:60})

Es ist output ist wie folgt -

one  two
0   10   10
1   20    0
2   30   30
3   40   40
4   50   50
5   60   60

Irgendein groupbyDie Operation umfasst eine der folgenden Operationen für das ursprüngliche Objekt. Sie sind -

  • Splitting das Objekt

  • Applying eine Funktion

  • Combining die Ergebnisse

In vielen Situationen teilen wir die Daten in Mengen auf und wenden auf jede Teilmenge einige Funktionen an. In der Apply-Funktionalität können wir die folgenden Operationen ausführen:

  • Aggregation - Berechnung einer zusammenfassenden Statistik

  • Transformation - eine gruppenspezifische Operation ausführen

  • Filtration - Verwerfen der Daten unter bestimmten Bedingungen

Lassen Sie uns nun ein DataFrame-Objekt erstellen und alle Operationen daran ausführen -

#import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df

Es ist output ist wie folgt -

Points   Rank     Team   Year
0      876      1   Riders   2014
1      789      2   Riders   2015
2      863      2   Devils   2014
3      673      3   Devils   2015
4      741      3    Kings   2014
5      812      4    kings   2015
6      756      1    Kings   2016
7      788      1    Kings   2017
8      694      2   Riders   2016
9      701      4   Royals   2014
10     804      1   Royals   2015
11     690      2   Riders   2017

Daten in Gruppen aufteilen

Pandas-Objekte können in jedes ihrer Objekte aufgeteilt werden. Es gibt mehrere Möglichkeiten, ein Objekt wie - zu teilen.

  • obj.groupby('key')
  • obj.groupby(['key1','key2'])
  • obj.groupby(key,axis=1)

Lassen Sie uns nun sehen, wie die Gruppierungsobjekte auf das DataFrame-Objekt angewendet werden können

Beispiel

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df.groupby('Team')

Es ist output ist wie folgt -

<pandas.core.groupby.DataFrameGroupBy object at 0x7fa46a977e50>

Gruppen anzeigen

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df.groupby('Team').groups

Es ist output ist wie folgt -

{'Kings': Int64Index([4, 6, 7],      dtype='int64'),
'Devils': Int64Index([2, 3],         dtype='int64'),
'Riders': Int64Index([0, 1, 8, 11],  dtype='int64'),
'Royals': Int64Index([9, 10],        dtype='int64'),
'kings' : Int64Index([5],            dtype='int64')}

Beispiel

Group by mit mehreren Spalten -

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df.groupby(['Team','Year']).groups

Es ist output ist wie folgt -

{('Kings', 2014): Int64Index([4], dtype='int64'),
 ('Royals', 2014): Int64Index([9], dtype='int64'),
 ('Riders', 2014): Int64Index([0], dtype='int64'),
 ('Riders', 2015): Int64Index([1], dtype='int64'),
 ('Kings', 2016): Int64Index([6], dtype='int64'),
 ('Riders', 2016): Int64Index([8], dtype='int64'),
 ('Riders', 2017): Int64Index([11], dtype='int64'),
 ('Devils', 2014): Int64Index([2], dtype='int64'),
 ('Devils', 2015): Int64Index([3], dtype='int64'),
 ('kings', 2015): Int64Index([5], dtype='int64'),
 ('Royals', 2015): Int64Index([10], dtype='int64'),
 ('Kings', 2017): Int64Index([7], dtype='int64')}

Durch Gruppen iterieren

Mit dem groupby Objekt in der Hand, können wir durch das Objekt iterieren, ähnlich wie itertools.obj.

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Year')

for name,group in grouped:
   print name
   print group

Es ist output ist wie folgt -

2014
   Points  Rank     Team   Year
0     876     1   Riders   2014
2     863     2   Devils   2014
4     741     3   Kings    2014
9     701     4   Royals   2014

2015
   Points  Rank     Team   Year
1     789     2   Riders   2015
3     673     3   Devils   2015
5     812     4    kings   2015
10    804     1   Royals   2015

2016
   Points  Rank     Team   Year
6     756     1    Kings   2016
8     694     2   Riders   2016

2017
   Points  Rank    Team   Year
7     788     1   Kings   2017
11    690     2  Riders   2017

Standardmäßig ist die groupby Objekt hat den gleichen Beschriftungsnamen wie der Gruppenname.

Wählen Sie eine Gruppe aus

Verwendung der get_group() Methode können wir eine einzelne Gruppe auswählen.

# import the pandas library
import pandas as pd

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Year')
print grouped.get_group(2014)

Es ist output ist wie folgt -

Points  Rank     Team    Year
0     876     1   Riders    2014
2     863     2   Devils    2014
4     741     3   Kings     2014
9     701     4   Royals    2014

Aggregationen

Eine aggregierte Funktion gibt für jede Gruppe einen einzelnen aggregierten Wert zurück. Sobald diegroup by Wenn ein Objekt erstellt wird, können mehrere Aggregationsvorgänge für die gruppierten Daten ausgeführt werden.

Eine offensichtliche ist die Aggregation über das Aggregat oder ein Äquivalent agg Methode -

# import the pandas library
import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Year')
print grouped['Points'].agg(np.mean)

Es ist output ist wie folgt -

Year
2014   795.25
2015   769.50
2016   725.00
2017   739.00
Name: Points, dtype: float64

Eine andere Möglichkeit, die Größe jeder Gruppe zu ermitteln, besteht darin, die Funktion size () anzuwenden.

import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

Attribute Access in Python Pandas
grouped = df.groupby('Team')
print grouped.agg(np.size)

Es ist output ist wie folgt -

Points   Rank   Year
Team
Devils        2      2      2
Kings         3      3      3
Riders        4      4      4
Royals        2      2      2
kings         1      1      1

Anwenden mehrerer Aggregationsfunktionen gleichzeitig

Bei gruppierten Serien können Sie auch eine übergeben list oder dict of functions Aggregation mit und Generieren von DataFrame als Ausgabe -

# import the pandas library
import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Team')
print grouped['Points'].agg([np.sum, np.mean, np.std])

Es ist output ist wie folgt -

Team      sum      mean          std
Devils   1536   768.000000   134.350288
Kings    2285   761.666667    24.006943
Riders   3049   762.250000    88.567771
Royals   1505   752.500000    72.831998
kings     812   812.000000          NaN

Transformationen

Die Transformation für eine Gruppe oder eine Spalte gibt ein Objekt zurück, das indiziert ist und dieselbe Größe hat wie das, das gruppiert wird. Daher sollte die Transformation ein Ergebnis zurückgeben, das dieselbe Größe wie das eines Gruppenblocks hat.

# import the pandas library
import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

grouped = df.groupby('Team')
score = lambda x: (x - x.mean()) / x.std()*10
print grouped.transform(score)

Es ist output ist wie folgt -

Points        Rank        Year
0   12.843272  -15.000000  -11.618950
1   3.020286     5.000000   -3.872983
2   7.071068    -7.071068   -7.071068
3  -7.071068     7.071068    7.071068
4  -8.608621    11.547005  -10.910895
5        NaN          NaN         NaN
6  -2.360428    -5.773503    2.182179
7  10.969049    -5.773503    8.728716
8  -7.705963     5.000000    3.872983
9  -7.071068     7.071068   -7.071068
10  7.071068    -7.071068    7.071068
11 -8.157595     5.000000   11.618950

Filtration

Die Filterung filtert die Daten nach definierten Kriterien und gibt die Teilmenge der Daten zurück. Dasfilter() Funktion wird verwendet, um die Daten zu filtern.

import pandas as pd
import numpy as np

ipl_data = {'Team': ['Riders', 'Riders', 'Devils', 'Devils', 'Kings',
   'kings', 'Kings', 'Kings', 'Riders', 'Royals', 'Royals', 'Riders'],
   'Rank': [1, 2, 2, 3, 3,4 ,1 ,1,2 , 4,1,2],
   'Year': [2014,2015,2014,2015,2014,2015,2016,2017,2016,2014,2015,2017],
   'Points':[876,789,863,673,741,812,756,788,694,701,804,690]}
df = pd.DataFrame(ipl_data)

print df.groupby('Team').filter(lambda x: len(x) >= 3)

Es ist output ist wie folgt -

Points  Rank     Team   Year
0      876     1   Riders   2014
1      789     2   Riders   2015
4      741     3   Kings    2014
6      756     1   Kings    2016
7      788     1   Kings    2017
8      694     2   Riders   2016
11     690     2   Riders   2017

In der obigen Filterbedingung bitten wir Sie, die Teams zurückzugeben, die drei oder mehr Mal an IPL teilgenommen haben.

Pandas verfügt über leistungsstarke In-Memory-Join-Vorgänge mit vollem Funktionsumfang, die relationalen Datenbanken wie SQL idiomatisch sehr ähnlich sind.

Pandas bietet eine einzige Funktion: merge, als Einstiegspunkt für alle Standard-Datenbankverbindungsvorgänge zwischen DataFrame-Objekten -

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True)

Hier haben wir die folgenden Parameter verwendet -

  • left - Ein DataFrame-Objekt.

  • right - Ein weiteres DataFrame-Objekt.

  • on- Spalten (Namen), an denen Sie teilnehmen möchten. Muss sowohl im linken als auch im rechten DataFrame-Objekt gefunden werden.

  • left_on- Spalten aus dem linken DataFrame, die als Schlüssel verwendet werden sollen. Kann entweder Spaltennamen oder Arrays sein, deren Länge der Länge des DataFrame entspricht.

  • right_on- Spalten aus dem rechten DataFrame, die als Schlüssel verwendet werden sollen. Kann entweder Spaltennamen oder Arrays sein, deren Länge der Länge des DataFrame entspricht.

  • left_index - Wenn True,Verwenden Sie den Index (Zeilenbeschriftungen) aus dem linken DataFrame als Join-Schlüssel. Bei einem DataFrame mit einem MultiIndex (hierarchisch) muss die Anzahl der Ebenen mit der Anzahl der Join-Schlüssel des rechten DataFrame übereinstimmen.

  • right_index - Gleiche Verwendung wie left_index für den richtigen DataFrame.

  • how- Eine von "links", "rechts", "außen", "innen". Der Standardwert ist inner. Jede Methode wurde unten beschrieben.

  • sort- Sortieren Sie das Ergebnis DataFrame nach den Verknüpfungsschlüsseln in lexikografischer Reihenfolge. Der Standardwert ist True. Wenn Sie den Wert auf False setzen, wird die Leistung in vielen Fällen erheblich verbessert.

Lassen Sie uns nun zwei verschiedene DataFrames erstellen und die Zusammenführungsvorgänge ausführen.

# import the pandas library
import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame(
   {'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print left
print right

Es ist output ist wie folgt -

Name  id   subject_id
0   Alex   1         sub1
1    Amy   2         sub2
2  Allen   3         sub4
3  Alice   4         sub6
4  Ayoung  5         sub5

    Name  id   subject_id
0  Billy   1         sub2
1  Brian   2         sub4
2  Bran    3         sub3
3  Bryce   4         sub6
4  Betty   5         sub5

Führen Sie zwei DataFrames auf einem Schlüssel zusammen

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on='id')

Es ist output ist wie folgt -

Name_x   id  subject_id_x   Name_y   subject_id_y
0  Alex      1          sub1    Billy           sub2
1  Amy       2          sub2    Brian           sub4
2  Allen     3          sub4     Bran           sub3
3  Alice     4          sub6    Bryce           sub6
4  Ayoung    5          sub5    Betty           sub5

Führen Sie zwei DataFrames auf mehreren Schlüsseln zusammen

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
	'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left,right,on=['id','subject_id'])

Es ist output ist wie folgt -

Name_x   id   subject_id   Name_y
0    Alice    4         sub6    Bryce
1   Ayoung    5         sub5    Betty

Zusammenführen mit dem Argument 'wie'

Das howDas zusammenzuführende Argument gibt an, wie bestimmt wird, welche Schlüssel in die resultierende Tabelle aufgenommen werden sollen. Wenn eine Tastenkombination weder in der linken noch in der rechten Tabelle angezeigt wird, sind die Werte in der verknüpften Tabelle NA.

Hier ist eine Zusammenfassung der how Optionen und ihre SQL-äquivalenten Namen -

Zusammenführungsmethode SQL-Äquivalent Beschreibung
links LINKE ÄUSSERE VERBINDUNG Verwenden Sie die Tasten des linken Objekts
Recht RIGHT OUTER JOIN Verwenden Sie Schlüssel vom rechten Objekt
äußere VOLLSTÄNDIGER OUTER JOIN Verwenden Sie die Vereinigung von Schlüsseln
innere INNER JOIN Verwenden Sie den Schnittpunkt der Schlüssel

Links beitreten

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='left')

Es ist output ist wie folgt -

Name_x   id_x   subject_id   Name_y   id_y
0     Alex      1         sub1      NaN    NaN
1      Amy      2         sub2    Billy    1.0
2    Allen      3         sub4    Brian    2.0
3    Alice      4         sub6    Bryce    4.0
4   Ayoung      5         sub5    Betty    5.0

Right Join

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='right')

Es ist output ist wie folgt -

Name_x  id_x   subject_id   Name_y   id_y
0      Amy   2.0         sub2    Billy      1
1    Allen   3.0         sub4    Brian      2
2    Alice   4.0         sub6    Bryce      4
3   Ayoung   5.0         sub5    Betty      5
4      NaN   NaN         sub3     Bran      3

Äußere Verbindung

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, how='outer', on='subject_id')

Es ist output ist wie folgt -

Name_x  id_x   subject_id   Name_y   id_y
0     Alex   1.0         sub1      NaN    NaN
1      Amy   2.0         sub2    Billy    1.0
2    Allen   3.0         sub4    Brian    2.0
3    Alice   4.0         sub6    Bryce    4.0
4   Ayoung   5.0         sub5    Betty    5.0
5      NaN   NaN         sub3     Bran    3.0

Inner Join

Die Verknüpfung wird für den Index durchgeführt. Die Verknüpfungsoperation berücksichtigt das Objekt, für das sie aufgerufen wird. Damit,a.join(b) ist ungleich zu b.join(a).

import pandas as pd
left = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame({
   'id':[1,2,3,4,5],
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5']})
print pd.merge(left, right, on='subject_id', how='inner')

Es ist output ist wie folgt -

Name_x   id_x   subject_id   Name_y   id_y
0      Amy      2         sub2    Billy      1
1    Allen      3         sub4    Brian      2
2    Alice      4         sub6    Bryce      4
3   Ayoung      5         sub5    Betty      5

Pandas bietet verschiedene Möglichkeiten zum einfachen Kombinieren Series, DataFrame, und Panel Objekte.

pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
  • objs - Dies ist eine Sequenz oder Zuordnung von Serien-, DataFrame- oder Panel-Objekten.

  • axis - {0, 1, ...}, Standard 0. Dies ist die Achse, entlang der verkettet werden soll.

  • join- {'inner', 'äußere'}, Standard 'äußere'. Umgang mit Indizes auf anderen Achsen. Außen für Vereinigung und Innen für Kreuzung.

  • ignore_index- Boolescher Wert, Standardwert False. Wenn True, verwenden Sie nicht die Indexwerte auf der Verkettungsachse. Die resultierende Achse wird mit 0, ..., n - 1 bezeichnet.

  • join_axes- Dies ist die Liste der Indexobjekte. Spezifische Indizes, die für die anderen (n-1) Achsen verwendet werden sollen, anstatt die innere / äußere Mengenlogik auszuführen.

Objekte verketten

Das concatDie Funktion erledigt das gesamte schwere Heben der Durchführung von Verkettungsvorgängen entlang einer Achse. Lassen Sie uns verschiedene Objekte erstellen und Verkettungen durchführen.

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two])

Es ist output ist wie folgt -

Marks_scored     Name   subject_id
1             98     Alex         sub1
2             90      Amy         sub2
3             87    Allen         sub4
4             69    Alice         sub6
5             78   Ayoung         sub5
1             89    Billy         sub2
2             80    Brian         sub4
3             79     Bran         sub3
4             97    Bryce         sub6
5             88    Betty         sub5

Angenommen, wir wollten jedem Teil des zerhackten DataFrame bestimmte Schlüssel zuordnen. Wir können dies tun, indem wir diekeys Argument -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],keys=['x','y'])

Es ist output ist wie folgt -

x  1  98    Alex    sub1
   2  90    Amy     sub2
   3  87    Allen   sub4
   4  69    Alice   sub6
   5  78    Ayoung  sub5
y  1  89    Billy   sub2
   2  80    Brian   sub4
   3  79    Bran    sub3
   4  97    Bryce   sub6
   5  88    Betty   sub5

Der Index der Resultierenden wird dupliziert; Jeder Index wird wiederholt.

Wenn das resultierende Objekt einer eigenen Indizierung folgen muss, setzen Sie ignore_index zu True.

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],keys=['x','y'],ignore_index=True)

Es ist output ist wie folgt -

Marks_scored     Name    subject_id
0             98     Alex          sub1
1             90      Amy          sub2
2             87    Allen          sub4
3             69    Alice          sub6
4             78   Ayoung          sub5
5             89    Billy          sub2
6             80    Brian          sub4
7             79     Bran          sub3
8             97    Bryce          sub6
9             88    Betty          sub5

Beachten Sie, dass sich der Index vollständig ändert und die Schlüssel ebenfalls überschrieben werden.

Wenn zwei Objekte hinzugefügt werden müssen axis=1Dann werden die neuen Spalten angehängt.

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],axis=1)

Es ist output ist wie folgt -

Marks_scored    Name  subject_id   Marks_scored    Name   subject_id
1           98      Alex      sub1         89         Billy         sub2
2           90       Amy      sub2         80         Brian         sub4
3           87     Allen      sub4         79          Bran         sub3
4           69     Alice      sub6         97         Bryce         sub6
5           78    Ayoung      sub5         88         Betty         sub5

Verketten mit Anhängen

Eine nützliche Verknüpfung zum Concat sind die Methoden zum Anhängen von Instanzen in Series und DataFrame. Diese Methoden waren tatsächlich älter als concat. Sie verketten sichaxis=0, nämlich der Index -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print one.append(two)

Es ist output ist wie folgt -

Marks_scored    Name  subject_id
1           98      Alex      sub1
2           90       Amy      sub2
3           87     Allen      sub4
4           69     Alice      sub6
5           78    Ayoung      sub5
1           89     Billy      sub2
2           80     Brian      sub4
3           79      Bran      sub3
4           97     Bryce      sub6
5           88     Betty      sub5

Das append Funktion kann auch mehrere Objekte aufnehmen -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print one.append([two,one,two])

Es ist output ist wie folgt -

Marks_scored   Name    subject_id
1           98     Alex          sub1
2           90      Amy          sub2
3           87    Allen          sub4
4           69    Alice          sub6
5           78   Ayoung          sub5
1           89    Billy          sub2
2           80    Brian          sub4
3           79     Bran          sub3
4           97    Bryce          sub6
5           88    Betty          sub5
1           98     Alex          sub1
2           90      Amy          sub2
3           87    Allen          sub4
4           69    Alice          sub6
5           78   Ayoung          sub5
1           89    Billy          sub2
2           80    Brian          sub4
3           79     Bran          sub3
4           97    Bryce          sub6
5           88    Betty          sub5

Zeitfolgen

Pandas bieten ein robustes Tool für die Arbeitszeit mit Zeitreihendaten, insbesondere im Finanzsektor. Bei der Arbeit mit Zeitreihendaten stoßen wir häufig auf Folgendes:

  • Zeitfolge erzeugen
  • Konvertieren Sie die Zeitreihen in verschiedene Frequenzen

Pandas bietet einen relativ kompakten und in sich geschlossenen Werkzeugsatz zur Ausführung der oben genannten Aufgaben.

Aktuelle Zeit abrufen

datetime.now() gibt Ihnen das aktuelle Datum und die Uhrzeit.

import pandas as pd

print pd.datetime.now()

Es ist output ist wie folgt -

2017-05-11 06:10:13.393147

Erstellen Sie einen Zeitstempel

Zeitstempeldaten sind die grundlegendste Art von Zeitreihendaten, die Werte mit Zeitpunkten verknüpfen. Für Pandas-Objekte bedeutet dies, die Zeitpunkte zu verwenden. Nehmen wir ein Beispiel -

import pandas as pd

print pd.Timestamp('2017-03-01')

Es ist output ist wie folgt -

2017-03-01 00:00:00

Es ist auch möglich, Epochenzeiten für Ganzzahlen oder Gleitkommazahlen zu konvertieren. Die Standardeinheit für diese ist Nanosekunden (da auf diese Weise Zeitstempel gespeichert werden). Oft werden Epochen jedoch in einer anderen Einheit gespeichert, die angegeben werden kann. Nehmen wir ein anderes Beispiel

import pandas as pd

print pd.Timestamp(1587687255,unit='s')

Es ist output ist wie folgt -

2020-04-24 00:14:15

Erstellen Sie einen Zeitbereich

import pandas as pd

print pd.date_range("11:00", "13:30", freq="30min").time

Es ist output ist wie folgt -

[datetime.time(11, 0) datetime.time(11, 30) datetime.time(12, 0)
datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)]

Ändern Sie die Häufigkeit der Zeit

import pandas as pd

print pd.date_range("11:00", "13:30", freq="H").time

Es ist output ist wie folgt -

[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]

Konvertieren in Zeitstempel

Um eine Serie oder ein listähnliches Objekt von datumsähnlichen Objekten zu konvertieren, z. B. Zeichenfolgen, Epochen oder eine Mischung, können Sie die verwenden to_datetimeFunktion. Bei Übergabe wird eine Serie (mit demselben Index) zurückgegeben, während alist-like wird in a umgewandelt DatetimeIndex. Schauen Sie sich das folgende Beispiel an -

import pandas as pd

print pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None]))

Es ist output ist wie folgt -

0  2009-07-31
1  2010-01-10
2         NaT
dtype: datetime64[ns]

NaT meint Not a Time (entspricht NaN)

Nehmen wir ein anderes Beispiel.

import pandas as pd

print pd.to_datetime(['2005/11/23', '2010.12.31', None])

Es ist output ist wie folgt -

DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)

Bei der Erweiterung der Zeitreihen spielen Datumsfunktionalitäten eine wichtige Rolle bei der Analyse von Finanzdaten. Bei der Arbeit mit Datumsdaten werden wir häufig auf Folgendes stoßen:

  • Datumsfolge generieren
  • Konvertieren Sie die Datumsreihen in verschiedene Frequenzen

Erstellen Sie einen Datumsbereich

Verwendung der date.range()Funktion durch Angabe der Perioden und der Häufigkeit können wir die Datumsreihen erstellen. Standardmäßig beträgt die Häufigkeit des Bereichs Tage.

import pandas as pd

print pd.date_range('1/1/2011', periods=5)

Es ist output ist wie folgt -

DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
   dtype='datetime64[ns]', freq='D')

Ändern Sie die Datumshäufigkeit

import pandas as pd

print pd.date_range('1/1/2011', periods=5,freq='M')

Es ist output ist wie folgt -

DatetimeIndex(['2011-01-31', '2011-02-28', '2011-03-31', '2011-04-30', '2011-05-31'],
   dtype='datetime64[ns]', freq='M')

bdate_range

bdate_range () steht für Geschäftsdatumsbereiche. Im Gegensatz zu date_range () werden Samstag und Sonntag ausgeschlossen.

import pandas as pd

print pd.date_range('1/1/2011', periods=5)

Es ist output ist wie folgt -

DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
   dtype='datetime64[ns]', freq='D')

Beachten Sie, dass nach dem 3. März das Datum auf den 6. März ohne 4. und 5. März springt. Überprüfen Sie einfach Ihren Kalender für die Tage.

Komfort funktioniert wie date_range und bdate_rangeVerwenden Sie eine Vielzahl von Frequenzaliasen. Die Standardhäufigkeit für date_range ist ein Kalendertag, während die Standardhäufigkeit für bdate_range ein Geschäftstag ist.

import pandas as pd
start = pd.datetime(2011, 1, 1)
end = pd.datetime(2011, 1, 5)

print pd.date_range(start, end)

Es ist output ist wie folgt -

DatetimeIndex(['2011-01-01', '2011-01-02', '2011-01-03', '2011-01-04', '2011-01-05'],
   dtype='datetime64[ns]', freq='D')

Versetzte Aliase

Eine Anzahl von String-Aliasen wird für nützliche gemeinsame Zeitreihenfrequenzen angegeben. Wir werden diese Aliase als Offset-Aliase bezeichnen.

Alias Beschreibung Alias Beschreibung
B. Häufigkeit von Werktagen BQS Starthäufigkeit des Geschäftsquartals
D. Kalendertag Häufigkeit EIN jährliche (Jahres-) Endfrequenz
W. wöchentliche Häufigkeit BA Häufigkeit zum Ende des Geschäftsjahres
M. Häufigkeit zum Monatsende BAS Starthäufigkeit des Geschäftsjahres
SM Halbmonatsendfrequenz BH Geschäftsstundenfrequenz
BM Häufigkeit des Geschäftsmonatsendes H. Stundenfrequenz
MS Starthäufigkeit des Monats T, min minutiöse Frequenz
SMS Starthäufigkeit für SMS-Halbmonate S. zweitens Frequenz
BMS Starthäufigkeit des Geschäftsmonats L, ms Millisekunden
Q. Viertelendfrequenz U, wir Mikrosekunden
BQ Häufigkeit des Geschäftsquartalsendes N. Nanosekunden
QS viertel Startfrequenz

Zeitdeltas sind Zeitunterschiede, ausgedrückt in Differenzeinheiten, z. B. Tage, Stunden, Minuten, Sekunden. Sie können sowohl positiv als auch negativ sein.

Wir können Timedelta-Objekte mit verschiedenen Argumenten erstellen, wie unten gezeigt -

String

Durch Übergeben eines Zeichenfolgenliteral können wir ein Zeitdelta-Objekt erstellen.

import pandas as pd

print pd.Timedelta('2 days 2 hours 15 minutes 30 seconds')

Es ist output ist wie folgt -

2 days 02:15:30

Ganze Zahl

Durch Übergeben eines ganzzahligen Werts an die Einheit erstellt ein Argument ein Timedelta-Objekt.

import pandas as pd

print pd.Timedelta(6,unit='h')

Es ist output ist wie folgt -

0 days 06:00:00

Datenversätze

Datenversätze wie - Wochen, Tage, Stunden, Minuten, Sekunden, Millisekunden, Mikrosekunden, Nanosekunden können ebenfalls im Bauwesen verwendet werden.

import pandas as pd

print pd.Timedelta(days=2)

Es ist output ist wie folgt -

2 days 00:00:00

to_timedelta ()

Verwenden der obersten Ebene pd.to_timedeltakönnen Sie einen Skalar, ein Array, eine Liste oder eine Serie von einem erkannten Timedelta-Format / Wert in einen Timedelta-Typ konvertieren. Es wird eine Serie erstellt, wenn die Eingabe eine Serie ist, ein Skalar, wenn die Eingabe skalarartig ist, andernfalls wird a ausgegebenTimedeltaIndex.

import pandas as pd

print pd.Timedelta(days=2)

Es ist output ist wie folgt -

2 days 00:00:00

Operationen

Sie können Serien / DataFrames bearbeiten und konstruieren timedelta64[ns] Serie durch Subtraktionsoperationen auf datetime64[ns] Serien oder Zeitstempel.

Lassen Sie uns nun einen DataFrame mit Timedelta- und datetime-Objekten erstellen und einige arithmetische Operationen daran ausführen -

import pandas as pd

s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))

print df

Es ist output ist wie folgt -

A      B
0  2012-01-01 0 days
1  2012-01-02 1 days
2  2012-01-03 2 days

Additionsoperationen

import pandas as pd

s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
df['C']=df['A']+df['B']

print df

Es ist output ist wie folgt -

A      B          C
0 2012-01-01 0 days 2012-01-01
1 2012-01-02 1 days 2012-01-03
2 2012-01-03 2 days 2012-01-05

Subtraktionsoperation

import pandas as pd

s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
df['C']=df['A']+df['B']
df['D']=df['C']+df['B']

print df

Es ist output ist wie folgt -

A      B          C          D
0 2012-01-01 0 days 2012-01-01 2012-01-01
1 2012-01-02 1 days 2012-01-03 2012-01-04
2 2012-01-03 2 days 2012-01-05 2012-01-07

Oft enthalten Daten in Echtzeit die Textspalten, die sich wiederholen. Funktionen wie Geschlecht, Land und Codes wiederholen sich immer. Dies sind die Beispiele für kategoriale Daten.

Kategoriale Variablen können nur eine begrenzte und normalerweise feste Anzahl möglicher Werte annehmen. Neben der festen Länge können kategoriale Daten eine Reihenfolge haben, aber keine numerische Operation ausführen. Kategorisch sind ein Pandas-Datentyp.

Der kategoriale Datentyp ist in den folgenden Fällen nützlich:

  • Eine Zeichenfolgenvariable, die nur aus wenigen unterschiedlichen Werten besteht. Das Konvertieren einer solchen Zeichenfolgenvariablen in eine kategoriale Variable spart Speicherplatz.

  • Die lexikalische Reihenfolge einer Variablen entspricht nicht der logischen Reihenfolge ("eins", "zwei", "drei"). Durch die Konvertierung in eine Kategorie und die Angabe einer Reihenfolge in den Kategorien verwenden Sortierung und Min / Max die logische Reihenfolge anstelle der lexikalischen Reihenfolge.

  • Als Signal an andere Python-Bibliotheken, dass diese Spalte als kategoriale Variable behandelt werden sollte (z. B. um geeignete statistische Methoden oder Diagrammtypen zu verwenden).

Objekterstellung

Kategoriale Objekte können auf verschiedene Arten erstellt werden. Die verschiedenen Möglichkeiten wurden unten beschrieben -

Kategorie

Durch Angabe des D-Typs als "Kategorie" bei der Pandas-Objekterstellung.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print s

Es ist output ist wie folgt -

0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

Die Anzahl der an das Serienobjekt übergebenen Elemente beträgt vier, die Kategorien sind jedoch nur drei. Beachten Sie dies auch in den Ausgabekategorien.

pd.Categorical

Mit dem Standard-Pandas-Konstruktor "Kategorie" können wir ein Kategorieobjekt erstellen.

pandas.Categorical(values, categories, ordered)

Nehmen wir ein Beispiel -

import pandas as pd

cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat

Es ist output ist wie folgt -

[a, b, c, a, b, c]
Categories (3, object): [a, b, c]

Lassen Sie uns ein anderes Beispiel haben -

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat

Es ist output ist wie folgt -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]

Hier bezeichnet das zweite Argument die Kategorien. Daher wird jeder Wert, der in den Kategorien nicht vorhanden ist, als behandeltNaN.

Schauen Sie sich nun das folgende Beispiel an:

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat

Es ist output ist wie folgt -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]

Logischerweise bedeutet die Reihenfolge, dass a ist größer als b und b ist größer als c.

Beschreibung

Verwendung der .describe() Befehl für die kategorialen Daten erhalten wir eine ähnliche Ausgabe wie a Series oder DataFrame des type Zeichenfolge.

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})

print df.describe()
print df["cat"].describe()

Es ist output ist wie folgt -

cat s
count    3 3
unique   2 2
top      c c
freq     2 2
count     3
unique    2
top       c
freq      2
Name: cat, dtype: object

Rufen Sie die Eigenschaften der Kategorie ab

obj.cat.categories Befehl wird verwendet, um die zu erhalten categories of the object.

import pandas as pd
import numpy as np

s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories

Es ist output ist wie folgt -

Index([u'b', u'a', u'c'], dtype='object')

obj.ordered Befehl wird verwendet, um die Reihenfolge des Objekts abzurufen.

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered

Es ist output ist wie folgt -

False

Die Funktion wurde zurückgegeben false weil wir keine Reihenfolge angegeben haben.

Kategorien umbenennen

Das Umbenennen von Kategorien erfolgt durch Zuweisen neuer Werte zu series.cat.categoriesseries.cat.categories-Eigenschaft.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories

Es ist output ist wie folgt -

Index([u'Group a', u'Group b', u'Group c'], dtype='object')

Anfangskategorien [a,b,c] werden von der aktualisiert s.cat.categories Eigentum des Objekts.

Neue Kategorien anhängen

Mit der Methode Categorical.add.categories () können neue Kategorien angehängt werden.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories

Es ist output ist wie folgt -

Index([u'a', u'b', u'c', 4], dtype='object')

Kategorien entfernen

Verwendung der Categorical.remove_categories() Methode können unerwünschte Kategorien entfernt werden.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s

print ("After removal:")
print s.cat.remove_categories("a")

Es ist output ist wie folgt -

Original object:
0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

After removal:
0  NaN
1  b
2  c
3  NaN
dtype: category
Categories (2, object): [b, c]

Vergleich kategorialer Daten

Der Vergleich kategorialer Daten mit anderen Objekten ist in drei Fällen möglich:

  • Vergleichen der Gleichheit (== und! =) mit einem listenartigen Objekt (Liste, Serie, Array, ...) mit der gleichen Länge wie die kategorialen Daten.

  • Alle Vergleiche (== ,! =,>,> =, <und <=) von kategorialen Daten mit einer anderen kategorialen Reihe, wenn geordnet == True und die Kategorien sind gleich.

  • alle Vergleiche kategorialer Daten mit einem Skalar.

Schauen Sie sich das folgende Beispiel an -

import pandas as pd

cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)

print cat>cat1

Es ist output ist wie folgt -

0  False
1  False
2  True
dtype: bool

Grundlegende Darstellung: Darstellung

Diese Funktionalität für Series und DataFrame ist nur ein einfacher Wrapper um die matplotlib libraries plot() Methode.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('1/1/2000',
   periods=10), columns=list('ABCD'))

df.plot()

Es ist output ist wie folgt -

Wenn der Index aus Datumsangaben besteht, wird aufgerufen gct().autofmt_xdate() um die x-Achse wie in der obigen Abbildung gezeigt zu formatieren.

Wir können eine Spalte gegen eine andere mit dem zeichnen x und y Schlüsselwörter.

Plotmethoden ermöglichen eine Handvoll anderer Plotstile als das Standardliniendiagramm. Diese Methoden können als Schlüsselwortargument für angegeben werdenplot(). Dazu gehören -

  • Bar oder Barh für Bar-Parzellen
  • hist für Histogramm
  • Box für Boxplot
  • 'Fläche' für Flächengrundstücke
  • 'Streuung' für Streudiagramme

Bar Plot

Lassen Sie uns nun sehen, was ein Balkendiagramm ist, indem wir eines erstellen. Ein Balkendiagramm kann folgendermaßen erstellt werden:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.bar()

Es ist output ist wie folgt -

Um ein gestapeltes Balkendiagramm zu erstellen, pass stacked=True - -

import pandas as pd
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.bar(stacked=True)

Es ist output ist wie folgt -

Verwenden Sie die, um horizontale Balkendiagramme zu erhalten barh Methode -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')

df.plot.barh(stacked=True)

Es ist output ist wie folgt -

Histogramme

Histogramme können mit der erstellt werden plot.hist()Methode. Wir können die Anzahl der Fächer angeben.

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.plot.hist(bins=20)

Es ist output ist wie folgt -

Verwenden Sie den folgenden Code, um unterschiedliche Histogramme für jede Spalte zu zeichnen:

import pandas as pd
import numpy as np

df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.diff.hist(bins=20)

Es ist output ist wie folgt -

Box Plots

Boxplot kann telefonisch gezeichnet werden Series.box.plot() und DataFrame.box.plot(), oder DataFrame.boxplot() um die Verteilung der Werte innerhalb jeder Spalte zu visualisieren.

Hier ist zum Beispiel ein Boxplot, der fünf Versuche mit 10 Beobachtungen einer einheitlichen Zufallsvariablen auf [0,1] darstellt.

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()

Es ist output ist wie folgt -

Flächengrundstück

Flächendiagramm kann mit dem erstellt werden Series.plot.area() oder der DataFrame.plot.area() Methoden.

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

Es ist output ist wie folgt -

Streudiagramm

Ein Streudiagramm kann mit dem erstellt werden DataFrame.plot.scatter() Methoden.

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')

Es ist output ist wie folgt -

Kuchendiagramm

Kreisdiagramm kann mit dem erstellt werden DataFrame.plot.pie() Methode.

import pandas as pd
import numpy as np

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)

Es ist output ist wie folgt -

Das Pandas I/O API ist eine Reihe von Top-Level-Reader-Funktionen, auf die wie zugegriffen wird pd.read_csv() das gibt im Allgemeinen ein Pandas-Objekt zurück.

Die beiden Arbeitstierfunktionen zum Lesen von Textdateien (oder Flatfiles) sind read_csv() und read_table(). Beide verwenden denselben Parsing-Code, um Tabellendaten intelligent in a zu konvertierenDataFrame Objekt -

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',
names=None, index_col=None, usecols=None

pandas.read_csv(filepath_or_buffer, sep='\t', delimiter=None, header='infer',
names=None, index_col=None, usecols=None

Hier ist wie die csv Dateidaten sehen aus wie -

S.No,Name,Age,City,Salary
1,Tom,28,Toronto,20000
2,Lee,32,HongKong,3000
3,Steven,43,Bay Area,8300
4,Ram,38,Hyderabad,3900

Speichern Sie diese Daten als temp.csv und Operationen darauf durchführen.

S.No,Name,Age,City,Salary
1,Tom,28,Toronto,20000
2,Lee,32,HongKong,3000
3,Steven,43,Bay Area,8300
4,Ram,38,Hyderabad,3900

Speichern Sie diese Daten als temp.csv und Operationen darauf durchführen.

read.csv

read.csv Liest Daten aus den CSV-Dateien und erstellt ein DataFrame-Objekt.

import pandas as pd

df=pd.read_csv("temp.csv")
print df

Es ist output ist wie folgt -

S.No     Name   Age       City   Salary
0     1      Tom    28    Toronto    20000
1     2      Lee    32   HongKong     3000
2     3   Steven    43   Bay Area     8300
3     4      Ram    38  Hyderabad     3900

benutzerdefinierter Index

Dies gibt eine Spalte in der CSV-Datei an, mit der der Index angepasst werden soll index_col.

import pandas as pd

df=pd.read_csv("temp.csv",index_col=['S.No'])
print df

Es ist output ist wie folgt -

S.No   Name   Age       City   Salary
1       Tom    28    Toronto    20000
2       Lee    32   HongKong     3000
3    Steven    43   Bay Area     8300
4       Ram    38  Hyderabad     3900

Konverter

dtype der Spalten kann als Diktat übergeben werden.

import pandas as pd

df = pd.read_csv("temp.csv", dtype={'Salary': np.float64})
print df.dtypes

Es ist output ist wie folgt -

S.No       int64
Name      object
Age        int64
City      object
Salary   float64
dtype: object

Standardmäßig ist die dtype der Gehaltsspalte ist int, aber das Ergebnis zeigt es als float weil wir den Typ explizit gegossen haben.

Somit sehen die Daten wie float aus -

S.No   Name   Age      City    Salary
0   1     Tom   28    Toronto   20000.0
1   2     Lee   32   HongKong    3000.0
2   3  Steven   43   Bay Area    8300.0
3   4     Ram   38  Hyderabad    3900.0

header_names

Geben Sie die Namen des Headers mit dem Argument names an.

import pandas as pd
 
df=pd.read_csv("temp.csv", names=['a', 'b', 'c','d','e'])
print df

Es ist output ist wie folgt -

a        b    c           d        e
0   S.No     Name   Age       City   Salary
1      1      Tom   28     Toronto    20000
2      2      Lee   32    HongKong     3000
3      3   Steven   43    Bay Area     8300
4      4      Ram   38   Hyderabad     3900

Beachten Sie, dass die Headernamen an die benutzerdefinierten Namen angehängt werden, der Header in der Datei jedoch nicht entfernt wurde. Jetzt verwenden wir das Header-Argument, um das zu entfernen.

Wenn sich die Kopfzeile in einer anderen als der ersten Zeile befindet, übergeben Sie die Zeilennummer an die Kopfzeile. Dadurch werden die vorhergehenden Zeilen übersprungen.

import pandas as pd 

df=pd.read_csv("temp.csv",names=['a','b','c','d','e'],header=0)
print df

Es ist output ist wie folgt -

a        b    c           d        e
0  S.No     Name   Age       City   Salary
1     1      Tom   28     Toronto    20000
2     2      Lee   32    HongKong     3000
3     3   Steven   43    Bay Area     8300
4     4      Ram   38   Hyderabad     3900

Skiprows

skiprows überspringt die Anzahl der angegebenen Zeilen.

import pandas as pd

df=pd.read_csv("temp.csv", skiprows=2)
print df

Es ist output ist wie folgt -

2      Lee   32    HongKong   3000
0   3   Steven   43    Bay Area   8300
1   4      Ram   38   Hyderabad   3900

Sparse-Objekte werden „komprimiert“, wenn Daten, die einem bestimmten Wert entsprechen (NaN / fehlender Wert, obwohl ein beliebiger Wert ausgewählt werden kann), weggelassen werden. Ein spezielles SparseIndex-Objekt verfolgt, wo Daten "sparsifiziert" wurden. Dies ist in einem Beispiel viel sinnvoller. Alle Standard-Pandas-Datenstrukturen gelten fürto_sparse Methode -

import pandas as pd
import numpy as np

ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts

Es ist output ist wie folgt -

0   -0.810497
1   -1.419954
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
7         NaN
8    0.439240
9   -1.095910
dtype: float64
BlockIndex
Block locations: array([0, 8], dtype=int32)
Block lengths: array([2, 2], dtype=int32)

Die spärlichen Objekte existieren aus Gründen der Speichereffizienz.

Nehmen wir nun an, Sie hatten einen großen NA-Datenrahmen und führen den folgenden Code aus:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10000, 4))
df.ix[:9998] = np.nan
sdf = df.to_sparse()

print sdf.density

Es ist output ist wie folgt -

0.0001

Jedes spärliche Objekt kann durch Aufrufen wieder in die Standardform mit hoher Dichte konvertiert werden to_dense - -

import pandas as pd
import numpy as np
ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts.to_dense()

Es ist output ist wie folgt -

0   -0.810497
1   -1.419954
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
7         NaN
8    0.439240
9   -1.095910
dtype: float64

Spärliche D-Typen

Sparse-Daten sollten den gleichen Typ wie ihre dichte Darstellung haben. Zur Zeit,float64, int64 und booldtypessind unterstützt. Abhängig vom Originaldtype, fill_value default Änderungen -

  • float64 - np.nan

  • int64 - 0

  • bool - Falsch

Lassen Sie uns den folgenden Code ausführen, um dasselbe zu verstehen:

import pandas as pd
import numpy as np

s = pd.Series([1, np.nan, np.nan])
print s

s.to_sparse()
print s

Es ist output ist wie folgt -

0   1.0
1   NaN
2   NaN
dtype: float64

0   1.0
1   NaN
2   NaN
dtype: float64

Vorsichtsmaßnahmen bedeuten Warnung und Gotcha bedeutet ein unsichtbares Problem.

Verwenden der If / Truth-Anweisung mit Pandas

Pandas folgt der Numpy-Konvention, einen Fehler auszulösen, wenn Sie versuchen, etwas in a umzuwandeln bool. Dies geschieht in einemif oder when Verwenden der Booleschen Operationen und or, oder not. Es ist nicht klar, was das Ergebnis sein soll. Sollte es wahr sein, weil es keine Nulllänge ist? Falsch, weil es falsche Werte gibt? Es ist unklar, also erhöht Pandas stattdessen aValueError - -

import pandas as pd

if pd.Series([False, True, False]):
   print 'I am True'

Es ist output ist wie folgt -

ValueError: The truth value of a Series is ambiguous. 
Use a.empty, a.bool() a.item(),a.any() or a.all().

Im ifBedingung ist es unklar, was damit zu tun ist. Der Fehler deutet darauf hin, ob a verwendet werden sollNone oder any of those.

import pandas as pd

if pd.Series([False, True, False]).any():
   print("I am any")

Es ist output ist wie folgt -

I am any

Verwenden Sie die Methode, um Pandas-Objekte mit einem Element in einem booleschen Kontext auszuwerten .bool() - -

import pandas as pd

print pd.Series([True]).bool()

Es ist output ist wie folgt -

True

Bitweiser Boolescher Wert

Bitweise Boolesche Operatoren wie == und != gibt eine Boolesche Reihe zurück, was sowieso fast immer erforderlich ist.

import pandas as pd

s = pd.Series(range(5))
print s==4

Es ist output ist wie folgt -

0 False
1 False
2 False
3 False
4 True
dtype: bool

ist im Betrieb

Dies gibt eine boolesche Reihe zurück, die zeigt, ob jedes Element in der Reihe genau in der übergebenen Wertesequenz enthalten ist.

import pandas as pd

s = pd.Series(list('abc'))
s = s.isin(['a', 'c', 'e'])
print s

Es ist output ist wie folgt -

0 True
1 False
2 True
dtype: bool

Neuindizierung gegen ix Gotcha

Viele Benutzer werden feststellen, dass sie das verwenden ix indexing capabilities als prägnantes Mittel zur Auswahl von Daten aus einem Pandas-Objekt -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))

print df
print df.ix[['b', 'c', 'e']]

Es ist output ist wie folgt -

one        two      three       four
a   -1.582025   1.335773   0.961417  -1.272084
b    1.461512   0.111372  -0.072225   0.553058
c   -1.240671   0.762185   1.511936  -0.630920
d   -2.380648  -0.029981   0.196489   0.531714
e    1.846746   0.148149   0.275398  -0.244559
f   -1.842662  -0.933195   2.303949   0.677641

          one        two      three       four
b    1.461512   0.111372  -0.072225   0.553058
c   -1.240671   0.762185   1.511936  -0.630920
e    1.846746   0.148149   0.275398  -0.244559

Dies ist in diesem Fall natürlich völlig gleichbedeutend mit der Verwendung von reindex Methode -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))

print df
print df.reindex(['b', 'c', 'e'])

Es ist output ist wie folgt -

one        two      three       four
a    1.639081   1.369838   0.261287  -1.662003
b   -0.173359   0.242447  -0.494384   0.346882
c   -0.106411   0.623568   0.282401  -0.916361
d   -1.078791  -0.612607  -0.897289  -1.146893
e    0.465215   1.552873  -1.841959   0.329404
f    0.966022  -0.190077   1.324247   0.678064

          one        two      three       four
b   -0.173359   0.242447  -0.494384   0.346882
c   -0.106411   0.623568   0.282401  -0.916361
e    0.465215   1.552873  -1.841959   0.329404

Einige könnten daraus schließen ix und reindexsind basierend darauf 100% äquivalent. Dies gilt nur für die Ganzzahlindizierung. Zum Beispiel kann die obige Operation alternativ ausgedrückt werden als -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(6, 4), columns=['one', 'two', 'three',
'four'],index=list('abcdef'))

print df
print df.ix[[1, 2, 4]]
print df.reindex([1, 2, 4])

Es ist output ist wie folgt -

one        two      three       four
a   -1.015695  -0.553847   1.106235  -0.784460
b   -0.527398  -0.518198  -0.710546  -0.512036
c   -0.842803  -1.050374   0.787146   0.205147
d   -1.238016  -0.749554  -0.547470  -0.029045
e   -0.056788   1.063999  -0.767220   0.212476
f    1.139714   0.036159   0.201912   0.710119

          one        two      three       four
b   -0.527398  -0.518198  -0.710546  -0.512036
c   -0.842803  -1.050374   0.787146   0.205147
e   -0.056788   1.063999  -0.767220   0.212476

    one  two  three  four
1   NaN  NaN    NaN   NaN
2   NaN  NaN    NaN   NaN
4   NaN  NaN    NaN   NaN

Es ist wichtig, sich daran zu erinnern reindex is strict label indexing only. Dies kann zu einigen möglicherweise überraschenden Ergebnissen in pathologischen Fällen führen, in denen ein Index beispielsweise sowohl Ganzzahlen als auch Zeichenfolgen enthält.

Da viele potenzielle Pandas-Benutzer mit SQL vertraut sind, soll diese Seite einige Beispiele dafür enthalten, wie verschiedene SQL-Vorgänge mit Pandas ausgeführt werden können.

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips.head()

Es ist output ist wie folgt -

total_bill   tip      sex  smoker  day     time  size
0        16.99  1.01   Female      No  Sun  Dinner      2
1        10.34  1.66     Male      No  Sun  Dinner      3
2        21.01  3.50     Male      No  Sun  Dinner      3
3        23.68  3.31     Male      No  Sun  Dinner      2
4        24.59  3.61   Female      No  Sun  Dinner      4

WÄHLEN

In SQL erfolgt die Auswahl mithilfe einer durch Kommas getrennten Liste der von Ihnen ausgewählten Spalten (oder eines *, um alle Spalten auszuwählen).

SELECT total_bill, tip, smoker, time
FROM tips
LIMIT 5;

Bei Pandas erfolgt die Spaltenauswahl durch Übergeben einer Liste von Spaltennamen an Ihren DataFrame.

tips[['total_bill', 'tip', 'smoker', 'time']].head(5)

Lassen Sie uns das vollständige Programm überprüfen -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'
 
tips=pd.read_csv(url)
print tips[['total_bill', 'tip', 'smoker', 'time']].head(5)

Es ist output ist wie folgt -

total_bill   tip  smoker     time
0       16.99  1.01      No   Dinner
1       10.34  1.66      No   Dinner
2       21.01  3.50      No   Dinner
3       23.68  3.31      No   Dinner
4       24.59  3.61      No   Dinner

Wenn Sie den DataFrame ohne die Liste der Spaltennamen aufrufen, werden alle Spalten angezeigt (ähnlich wie bei SQL *).

WO

Das Filtern in SQL erfolgt über eine WHERE-Klausel.

SELECT * FROM tips WHERE time = 'Dinner' LIMIT 5;

DataFrames können auf verschiedene Arten gefiltert werden. Am intuitivsten ist die Verwendung der Booleschen Indizierung.

tips[tips['time'] == 'Dinner'].head(5)

Lassen Sie uns das vollständige Programm überprüfen -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips[tips['time'] == 'Dinner'].head(5)

Es ist output ist wie folgt -

total_bill   tip      sex  smoker  day    time  size
0       16.99  1.01   Female     No   Sun  Dinner    2
1       10.34  1.66     Male     No   Sun  Dinner    3
2       21.01  3.50     Male     No   Sun  Dinner    3
3       23.68  3.31     Male     No   Sun  Dinner    2
4       24.59  3.61   Female     No   Sun  Dinner    4

Die obige Anweisung übergibt eine Reihe von True / False-Objekten an den DataFrame und gibt alle Zeilen mit True zurück.

Gruppiere nach

Diese Operation ruft die Anzahl der Datensätze in jeder Gruppe in einem Datensatz ab. Zum Beispiel eine Abfrage, die uns die Anzahl der Tipps abruft, die das Geschlecht hinterlassen hat -

SELECT sex, count(*)
FROM tips
GROUP BY sex;

Das Pandas-Äquivalent wäre -

tips.groupby('sex').size()

Lassen Sie uns das vollständige Programm überprüfen -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips.groupby('sex').size()

Es ist output ist wie folgt -

sex
Female   87
Male    157
dtype: int64

Top N Reihen

SQL gibt das zurück top n rows mit LIMIT - -

SELECT * FROM tips
LIMIT 5 ;

Das Pandas-Äquivalent wäre -

tips.head(5)

Schauen wir uns das vollständige Beispiel an -

import pandas as pd

url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
tips = tips[['smoker', 'day', 'time']].head(5)
print tips

Es ist output ist wie folgt -

smoker   day     time
0      No   Sun   Dinner
1      No   Sun   Dinner
2      No   Sun   Dinner
3      No   Sun   Dinner
4      No   Sun   Dinner

Dies sind die wenigen grundlegenden Operationen, die wir in den vorherigen Kapiteln der Pandas-Bibliothek verglichen haben.