Zurück


Einführung


Hier lernst du wie man die Datentypen in einem DataFrame untersucht und wie man Einträge finden und gleich ersetzen kann.

Dtypes

Der Datentyp einer Spalte in einem DataFrame oder einer Series ist als dtype bekannt.

Du kannst die Eigenschaften eines dtype's verwenden um den bestimmten Datentyp einer Spalte zu erhalten.
Holen wir uns jetzt mal von der reviews DataFrame die price Spalte mit dem dtype:

Aufklappen
import pandas as pd
reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
pd.set_option('max_rows', 5)



reviews.price.dtype

dtype('float64')


Wenn wir wollen, könnten wir mit dtype Eigenschaften nutzen,
um die dtypes aller Spalten eines DataFrames zu ergattern:

reviews.dtypes

country object
description object
...
variety object
winery object
Length: 13, dtype: object


Datentypen zeigen uns wie Pandas die Daten in dem System speichert.
float64 bedeutet das die float Zahl 64-bit enthalten kann, int64 hat dieselbe Bedeutung aber für integers statt floats.
Eine komische Eigenschaft die wir vorhin erkennen konnten war,
das eine Spalte aus Strings nicht seinen eigenen Datentyp hat sondern als Datentyp object gekennzeichnet ist.
Wir können auch da wo es logisch wirkt den Datentyp einer Spalte in eine andere Konvertieren mit dem astype() Funktion.
Wir können auch points spalte von int64 zu float64 konvertieren:

reviews.points.astype('float64')

0 87.0
1 87.0
...
129969 90.0
129970 90.0
Name: points, Length: 129971, dtype: float64

Der index einer DataFrame oder einer Series hat auch seinen eigenen dtype:

reviews.index.dtype

dtype('int64')


Pandas stellt auch exotischere Datentypen zur Verfügung,
die kommen aber selten vor also werden wir nicht über diese Datentypen in unserem Kurs sprechen und ersuchen sie zum Selbststudium.

Fehlende Daten

Einträge mit einem Fehlenden Wert kriegen den Wert NaN, kurz für "Not a Number" (Nicht eine Nummer).
Aus technischen Gründen haben NaN werte immer float64 als Datentyp.

Pandas verfügt über Methoden, die sich genau um diese fehlenden Daten kümmern,
um einträge mit NaN zu empfangen kannst du pd.isnull() (oder die verwandte Methode pd.notnull()) einsetzen.

reviews[pd.isnull(reviews.country)]

country

description

designation

points

price

province

region_1

region_2

taster_name

taster_twitter_handle

title

variety

winery

913

NaN

Amber in color, this wine has aromas of peach ...

Asureti Valley

87

30.0

NaN

NaN

NaN

Mike DeSimone

@worldwineguys

Gotsa Family Wines 2014 Asureti Valley Chinuri

Chinuri

Gotsa Family Wines

3131

NaN

Soft, fruity and juicy, this is a pleasant, si...

Partager

83

NaN

NaN

NaN

NaN

Roger Voss

@vossroger

Barton & Guestier NV Partager Red

Red Blend

Barton & Guestier

...

...

...

...

...

...

...

...

...

...

...

...

...

...

129590

NaN

A blend of 60% Syrah, 30% Cabernet Sauvignon a...

Shah

90

30.0

NaN

NaN

NaN

Mike DeSimone

@worldwineguys

Büyülübağ 2012 Shah Red

Red Blend

Büyülübağ

129900

NaN

This wine offers ful bouquet of black...

NaN

91

32.0

NaN

NaN

NaN

Mike DeSimone

@worldwineguys

Psagot 2014 Merlot

Merlot

Psagot


63 Zeilen x 13 Spalten

Fehlende Daten können wir mit der berühmten Operation fillna() auffüllen.
Wir können mit fillna() ein paar verschieden Strategien einsetzen um diese Daten zu vermindern,
hier ein Beispiel wo wir alle NaN werte mit einem "Unknown" ersetzen:

reviews.region_2.fillna("Unknown")

0 Unknown
1 Unknown ...
129969 Unknown
129970 Unknown

Name: region_2, Length: 129971, dtype: object


Oder wir können die NaN stellen mit dem ersten nicht Null Wert ersetzen, der vor der NaN stelle kommt.
Das ist bekannt als die "backfill" Strategie.

Wir können aber auch einen selbst bestimmten non-null Wert fürs nachfüllen einsetzen.
Wir wollen jetzt dieses Dataset veröffentlichen, jedoch hat der Kritiker Kerin O'Keefe sein Twitter handle von @kerinokeefo nur zu @kerino umgeändert.
In diesem Beispiel würde die replace() Methode gut Funktionieren:

reviews.taster_twitter_handle.replace("@kerinokeefe", "@kerino")

0 @kerino
1 @vossroger
...
129969 @vossroger
129970 @vossroger

Name: taster_twitter_handle, Length: 129971, dtype: object

linkcode


Es ist wichtig die replace() Methode hier zu erwähnen da es äußerst wichtig ist für das ersetzen von Fehlenden Daten,
Fehlende Daten werden meistens zu "Unbekannt", "Invalide", "Fehlender Eintrag", usw. geändert da NaN nicht gerade das Beste ist zum Lesen.