Pandas-Tutorial

So geht Datenanalyse mit Python

16.04.2024
Von 
Serdar Yegulalp schreibt für unsere US-Schwesterpublikation Infoworld.

Spalten und Zeilen in Pandas

Nachdem Sie nun einen einfachen Datensatz laden können, möchten Sie auch dessen Inhalte inspizieren. Sie könnten dazu auf den print-Befehl setzen - allerdings sind die meisten DataFrames dafür zu groß. Ein besserer Ansatz besteht darin, nur eine Teilmenge der Daten zu betrachten - ähnlich wie wir es bereits mit df.head() gemacht haben, aber mit mehr Kontrollmöglichkeiten. Indem Sie Pythons bestehende Syntax nutzen, um Slices zu erstellen und zu indizieren, können Sie mit Pandas auch DataFrame-Auszüge erstellen.

Spalten extrahieren

Um einzelne Spalten in einem Pandas-DataFrame zu untersuchen, können Sie diese anhand ihrer Namen, Positionen oder Bereiche extrahieren. Wenn Sie beispielweise eine spezifische Spalte aus Ihrem Datensatz benötigen, können Sie sie mit Hilfe eckiger Klammern nach ihrem Namen abfragen:

# extract the column "country" into its own dataframe

country_df = df["country"]

# show the first five rows

print(country_df.head())

| 0 Afghanistan

| 1 Afghanistan

| 2 Afghanistan

| 3 Afghanistan

| 4 Afghanistan

Name: country, dtype: object

# show the last five rows

print(country_df.tail())

| 1699 Zimbabwe

| 1700 Zimbabwe

| 1701 Zimbabwe

| 1702 Zimbabwe

| 1703 Zimbabwe

| Name: country, dtype: object

Falls Sie mehrere Spalten extrahieren wollen, übergeben Sie eine Liste der betreffenden Spaltennamen:

# Looking at country, continent, and year

subset = df[['country', 'continent', 'year']]

print(subset.head())

country continent year

| 0 Afghanistan Asia 1952

| 1 Afghanistan Asia 1957

| 2 Afghanistan Asia 1962

| 3 Afghanistan Asia 1967

| 4 Afghanistan Asia 1972

print(subset.tail())

country continent year

| 1699 Zimbabwe Africa 1987

| 1700 Zimbabwe Africa 1992

| 1701 Zimbabwe Africa 1997

| 1702 Zimbabwe Africa 2002

| 1703 Zimbabwe Africa 2007

Zeilen extrahieren

Wenn Sie Zeilen (Rows) aus einem DataFrame extrahieren möchten, stehen Ihnen dazu bei Pandas zwei Methoden zur Verfügung:

  1. .iloc[] ist die einfachste Methode. Sie extrahiert Zeilen basierend auf ihrer Position, beginnend bei 0. Um die erste Zeile im obigen Beispiel eines DataFrames einzuladen, würden Sie folglich df.iloc[0] verwenden. Wenn Sie einen Bereich einer Zeile abrufen möchten, können Sie .iloc[] in Kombination mit der Slicing-Syntax von Python verwenden. Für die ersten zehn Zeilen würden Sie beispielsweise df.iloc[0:10] verwenden. Wenn Sie spezifische Zeilen extrahieren möchten, können Sie auch eine Liste der Zeilen-IDs verwenden, etwa df.iloc[[0,1,2,5,7,10,12]]. Beachten Sie dabei die doppelten Klammern - sie bedeuten, dass Sie eine Liste als erstes Argument angeben.

  2. Die andere Möglichkeit, Zeilen zu extrahieren, ist .loc[]. Dies extrahiert eine Teilmenge auf der Grundlage der Beschriftungen der Zeilen. Standardmäßig werden die Zeilen mit einem aufsteigenden ganzzahligen Wert (beginnend mit 0) gelabelt. Die Daten können aber auch manuell beschriftet werden, indem Sie die .index-Property des DataFrame festlegen. Wenn wir zum Beispiel den obigen DataFrame neu indizieren wollten, so dass jede Zeile einen Index mit Vielfachen von 100 aufweist, könnten wir dazu df.index = range(0, len(df)*100, 100) verwenden. Wenn wir anschließend df.loc[100] verwenden, würden wir die zweite Zeile erhalten.

Spalten extrahieren

Für den Fall dass Sie nur eine bestimmte Untergruppe von Spalten zusammen mit Ihren Zeilen-Slices abrufen möchten, übergeben Sie eine entsprechende Liste von Spalten als zweites Argument:

df.loc[[rows], [columns]]

Wenn wir etwa aus dem obigen Beispiel-Datensatz ausschließlich die Spalten "Country" und "Year" für alle Zeilen abrufen wollen, gehen wir wie folgt vor:

df.loc[:, ["country","year"]]

Der : bedeutet "alle Zeilen" (das ist Pythons Slicing-Syntax). Die Liste der Spalten folgt nach dem Komma. Sie können auch Spalten nach Position angeben, indem Sie .iloc verwenden:

df.iloc[:, [0,2]]

Das funktioniert auch, wenn Sie nur die ersten drei Spalten brauchen:

df.iloc[:, 0:3]

All diese Ansätze lassen sich miteinander kombinieren, insofern Sie loc für Labels und Spaltennamen und iloc für numerische Indizes verwenden. Im Folgenden weisen wir Pandas an, die ersten 100 Zeilen anhand ihrer numerischen Bezeichnungen zu extrahieren und das anschließend für die ersten drei Spalten (anhand ihrer Indizes) zu wiederholen:

df.loc[0:100].iloc[:, 0:3]

Um Verwirrung zu vermeiden, empfiehlt es sich, bei der Unterteilung von Daten die tatsächlichen Spaltennamen zu verwenden. Dadurch ist der Code leichter zu lesen - und Sie müssen nicht auf den Datensatz zurückgreifen, um herauszufinden, welche Spalte welchem Index entspricht. Außerdem bewahrt Sie das vor Fehlern, wenn die Spalten neu geordnet werden.