Zurück


Einführung

In diesem Kurs wirst du über das berühmteste Python Library für die Daten Analyse lernen, Pandas!

In diesem Tutorial wirst du lernen wie du deine eigene Daten erstellst und wie du mit
bereits existierenden Daten arbeiten kannst.

Zu beginn

Um Pandas einzusetzt musst du zuerst es importieren.

import pandas as pd


Daten erstellen


Es gibt zwei Haupt Objekte in Pandas: das DataFrame und die Serie.

Ein DataFrame ist ein table. Es enthält Reihe von unterschiedlichen entries, die jeweils einen
bestimmten Wert haben. Jedes entry gehört zu einer bestimmten Zeile und Spalte.

Hier ist ein Beispiel zu einem einfachem DataFrame:

pd.DataFrame({'Ja': [50, 21], 'Nein': [131, 2]})

 

Yes

No

0

50

131

1

21

2


Wie hier zu sehen ist, ist im "0, Nein" entry ein Wert von 131 und beim "0, Ja" ein entry mit dem Wert 50.
DataFrame entries können nicht nur integers beeinhalten, es gibt auch DataFrames mit Strings als Wert:

pd.DataFrame({Fritz: ['Ich fands gut.', 'Grauenhaft!'], 'Zeynep': ['Toll!', 'Nicht gut']})

 

Fritz

Zeynep

0

Ich fands gut

Toll!

1

Grauenhaft!

Nicht gut


Um DataFrame Objekte zu generieren, verwenden wir pd.Dataframe(). Die Syntax ist dieselbe wie bei einem Dictionary,
Fritz und Zeynep sind die Schlüssel und die Werte sind die entries. So macht man normalerweise ein DataFrame und die die du am häufigsten begegnen wirst.
Der Bibliotheken-listen Bauer setzt die Werte in die Spalten Labels, aber es wird von 0 aufgezählt für die Zeilen Labels.
Meistens ist das kein Problem, aber es ist eine gute Angewohnheit es manuell zu setzen.
Die Liste der Zeilen Labels im DataFrame ist als Index bekannt. Wir können es in dem Bauer einen Parameter namens Index einbauen.

pd.DataFrame({'Fritz': ['Ich fands gut', 'Grauenhaft!'],
'Zeynep': ['Toll!', 'Nicht gut']},
index=['Produkt A', 'Produkt B'])

Fritz

Zeynep

Produkt A

Ich fands gut

Toll!

Produkt B

Grauenhaft!

Nicht gut


Series


Im Gegensatz zu einem DataFrame ist eine Series eine Sequenz von Datenwerten. Wir können diese Analogie verwenden: Eine Series ist
dasselbe zu einem DataFrame, wie eine Liste zu einer Table ist. Lustigerweise können wir es nur mit einer Liste machen:

pd.Series([1, 2, 3, 4, 5])
0 1
1 2
2 3
3 4
4 5
dtype: int64

So gesehen ist eine Series eine einzelne Spalte von einem DataFrame. Du kannst denselben Befehl wie beim DataFrame nutzen um Zeilen
Labels zu setzen mit index. Eine Series hat aber keine Spaltennamen, sondern nur einen Oberbegriff Namen:

pd.Series([30, 35, 40], index=['2015 Sales', '2016 Sales', '2017 Sales'], name='Produkt A')

2015 Sales 30
2016 Sales 35
2017 Sales 40
Name: Produkt A, dtype: int64


Das DataFrame und die Series sind sehr nah verwandt. Es ist gut sich zu merken, dass DataFrames einfach mehrere Series die zusammengeklebt sind.

Datenwerte lesen


DataFrames und Series zu erstellen ist zwar nützlich, jedoch werden wir meistens nicht unsere eigenen Daten
erstellen. Wir arbeiten meistens mit Dateien, die schon existieren.

Daten können in vielen Arten und Formaten gespeichert werden. Der normalste Format wäre eine CSV Datei,
die schauen so aus wenn du sie auf machst:

Product A,Product B,Product C,
30,21,9,
35,34,1,
41,11,11


Wie du sehen kannst ist eine CSV Datei ein table von werten der mit Beistrichen getrennt werden. Daher der Name: "Comma-Separated-Values".

Tuen wir mal unsere Übungen zur Seite und sehen wir uns mal ein echtes Dataset ausschaut wenn wir es in
unser DataFrame reinlesen. In diesem Fall setzen wir pd.read_csv() Funktion ein.

wine_reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv")

Wir können das shape Attribut verwenden um die Größe des resultierenden DataFrames zu entdecken:

wine_reviews.shape

(129971, 14)


Unser neues DataFrame hat zirka 130.000 records die in 14 Spalten aufgeteilt sind. Das sind fast 2 Millionen Einträge. Wir können auch den Inhalt des resultierenden DataFrames mit dem head() Befehl untersuchen, es nimmt die erste 5 Zeilen.

wine_reviews.head()

Unnamed: 0

country

description

designation

points

price

province

region_1

region_2

taster_name

taster_twitter_handle

title

variety

winery

0

0

Italy

Aromas include tropical fruit, broom, brimston...

Vulkà Bianco

87

NaN

Sicily & Sardinia

Etna

NaN

Kerin O’Keefe

@kerinokeefe

Nicosia 2013 Vulkà Bianco (Etna)

White Blend

Nicosia

1

1

Portugal

This is ripe and fruity, a wine that is smooth...

Avidagos

87

15.0

Douro

NaN

NaN

Roger Voss

@vossroger

Quinta dos Avidagos 2011 Avidagos Red (Douro)

Portuguese Red

Quinta dos Avidagos

2

2

US

Tart and snappy, the flavors of lime flesh and...

NaN

87

14.0

Oregon

Willamette Valley

Willamette Valley

Paul Gregutt

@paulgwine

Rainstorm 2013 Pinot Gris (Willamette Valley)

Pinot Gris

Rainstorm

3

3

US

Pineapple rind, lemon pith and orange blossom ...

Reserve Late Harvest

87

13.0

Michigan

Lake Michigan Shore

NaN

Alexander Peartree

NaN

St. Julian 2013 Reserve Late Harvest Riesling ...

Riesling

St. Julian

4

4

US

Much like the regular bottling from 2012, this...

Vintner's Reserve Wild Child Block

87

65.0

Oregon

Willamette Valley

Willamette Valley

Paul Gregutt

@paulgwine

Sweet Cheeks 2012 Vintner's Reserve Wild Child...

Pinot Noir

Sweet Cheeks


Die pd.read_csv() Funktion ist sehr flexibel, es hat über 30 optionale Parameter die du auswählen kannst.
Zum Beispiel, hier kannst du sehen, dass dieses Dataset von der CSV, einen eingebauten Index hat, Pandas hat das nicht automatisch verstanden.
Wir können aber mit index_col verdeutlichen welche Spalte für die Indexes verwendet werden soll.

wine_reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0) wine_reviews.head()

country

description

designation

points

price

province

region_1

region_2

taster_name

taster_twitter_handle

title

variety

winery

0

Italy

Aromas include tropical fruit, broom, brimston...

Vulkà Bianco

87

NaN

Sicily & Sardinia

Etna

NaN

Kerin O’Keefe

@kerinokeefe

Nicosia 2013 Vulkà Bianco (Etna)

White Blend

Nicosia

1

Portugal

This is ripe and fruity, a wine that is smooth...

Avidagos

87

15.0

Douro

NaN

NaN

Roger Voss

@vossroger

Quinta dos Avidagos 2011 Avidagos Red (Douro)

Portuguese Red

Quinta dos Avidagos

2

US

Tart and snappy, the flavors of lime flesh and...

NaN

87

14.0

Oregon

Willamette Valley

Willamette Valley

Paul Gregutt

@paulgwine

Rainstorm 2013 Pinot Gris (Willamette Valley)

Pinot Gris

Rainstorm

3

US

Pineapple rind, lemon pith and orange blossom ...

Reserve Late Harvest

87

13.0

Michigan

Lake Michigan Shore

NaN

Alexander Peartree

NaN

St. Julian 2013 Reserve Late Harvest Riesling ...

Riesling

St. Julian

4

US

Much like the regular bottling from 2012, this...

Vintner's Reserve Wild Child Block

87

65.0

Oregon

Willamette Valley

Willamette Valley

Paul Gregutt

@paulgwine

Sweet Cheeks 2012 Vintner's Reserve Wild Child...

Pinot Noir

Sweet Cheeks