# Datenbereinigung mit Pandas dropna()

Die [Python Pandas](https://www.ionos.at/digitalguide/websites/web-entwicklung/python-pandas/) `DataFrame.dropna()`-Funktion dient dazu, alle Zeilen oder Spalten aus einem DataFrame zu entfernen, die fehlende Werte (NaN) enthalten. Insbesondere bei der **Datenvorbereitung und -bereinigung** spielt sie daher eine entscheidende Rolle.

## Syntax von Pandas `dropna()`

Die `dropna()`-Funktion nimmt **bis zu fünf Parameter** entgegen. Die grundlegende Syntax ist dabei denkbar einfach:

```python
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False, ignore_index=False)
```

### Relevante Parameter

Das Verhalten der Pandas-`DataFrame.dropna()`-Funktion kann durch die übergebenen **Parameter beeinflusst** werden. Die wichtigsten Parameter sind in der folgenden Tabelle zusammengefasst:

<table>
  <thead>
    <tr>
      <th><strong>Parameter</strong></th>
      <th><strong>Beschreibung</strong></th>
      <th><strong>Defaultwert</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`axis`</td>
      <td>Bestimmt, ob Zeilen (0 oder `index`) oder Spalten (1 oder `columns`) entfernt werden</td>
      <td>0</td>
    </tr>
    <tr>
      <td>`how`</td>
      <td>Gibt an, ob alle (`all`) oder nur einige Werte NaN (`any`) sein müssen</td>
      <td>`any`</td>
    </tr>
    <tr>
      <td>`tresh`</td>
      <td>Gibt die Mindestanzahl der Nicht-NaN-Werte an, die eine Zeile oder Spalte haben muss, um nicht entfernt zu werden; kann nicht mit `how` kombiniert werden</td>
      <td>optional</td>
    </tr>
    <tr>
      <td>`subset`</td>
      <td>Bestimmt, welche Zeilen oder Spalten betrachtet werden sollen</td>
      <td>optional</td>
    </tr>
    <tr>
      <td>`inplace`</td>
      <td>Entscheidet, ob die Operation im ursprünglichen DataFrame durchgeführt wird</td>
      <td>`False`</td>
    </tr>
    <tr>
      <td>`ignore_index`</td>
      <td>Wenn `True`, werden verbleibende Achsen beschriftet mit 0 bis n-1</td>
      <td>`False`</td>
    </tr>
  </tbody>
</table>

## Anwendung von Pandas `DataFrame.dropna()`

Pandas `dropna()` wird benötigt, um Daten vor der Analyse zu bereinigen, indem Zeilen oder Spalten mit fehlenden Werten entfernt werden. Dies hilft dabei, **Verzerrungen** in statistischen Auswertungen zu **vermeiden**. Zudem **erleichtert sie das Erstellen von Diagrammen** und Berichten, da fehlende Werte in einigen Fällen zu fehlerhaften Darstellungen führen können.

### Entfernen von Zeilen mit fehlenden Werten

Im folgenden Codebeispiel betrachten wir einen DataFrame, der NaN-Werte enthält:

```python
import pandas as pd
import numpy as np
# Erstellen eines DataFrames mit Beispieldaten
data = {
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, np.nan, 8],
    'C': [9, 10, 11, 12]
}
df = pd.DataFrame(data)
print(df)
```

Der DataFrame sieht wie folgt aus:

```none
A    B   C
0  1.0  5.0   9
1  2.0  NaN  10
2  NaN  NaN  11
3  4.0  8.0  12
```

Im nächsten Schritt wenden wir die Pandas-`dropna()`-Funktion an:

```python
## Entfernen aller Zeilen, die mindestens einen NaN-Wert enthalten
df_cleaned = df.dropna()
print(df_cleaned)
```

Die Ausführung des Codes liefert folgendes Ergebnis:

```none
A    B  C
0  1.0  5.0  9
3  4.0  8.0 12
```

Nur die nullte und die dritte Zeile des DataFrames sind noch vorhanden, da alle anderen Zeilen NaN-Werte enthielten.

### Entfernen von Spalten mit fehlenden Werten

Analog funktioniert das Entfernen von Spalten mit fehlenden Werten. Hierfür muss lediglich der `axis`-Parameter der Funktion auf 1 gesetzt werden:

```python
## Entfernen aller Spalten, die mindestens einen NaN-Wert enthalten
df_cleaned_columns = df.dropna(axis=1)
print(df_cleaned_columns)
```

Im Ergebnis ist zu sehen, dass nur noch die Spalte „C“ vorhanden ist, da sie als einzige keinen NaN-Wert enthält:

```none
C
0   9
1  10
2  11
3  12
```

### Anwendung von `thresh`

Wenn nur Zeilen entfernt werden sollen, die weniger als zwei Nicht-NaN-Werte haben, kann der `thresh`-Parameter verwendet werden:

```python
## Entfernen aller Zeilen mit weniger als zwei Nicht-NaN-Werten
df_thresh = df.dropna(thresh=2)
print(df_thresh)
```

Nach Ausführung des Codes ist die erste Zeile nun ebenfalls noch vorhanden, da sie zwei Nicht-NaN-Werte enthält:

```none
A    B   C
0  1.0  5.0   9
1  2.0  NaN  10
3  4.0  8.0  12
```

### Anwendung von `subset`

Der Parameter `subset` wird verwendet, um die spezifischen Spalten anzugeben, in denen nach fehlenden Werten gesucht werden soll. Nur die Zeilen, die in den angegebenen Spalten fehlende Werte haben, werden entfernt.

```python
## Entfernen aller Zeilen, die in Spalte „A“ einen NaN-Wert enthalten:
df_subset = df.dropna(subset=['A'])
print(df_subset)
```

Es fällt auf, dass nur die zweite Zeile entfernt worden ist. Der NaN-Wert in der ersten Zeile wird aufgrund des gesetzten Parameters ignoriert, da Spalte „B“ nicht betrachtet wurde:

```none
A    B   C
0  1.0  5.0   9
1  2.0  NaN  10
3  4.0  8.0  12
```


This is a markdown version of: [https://www.ionos.at/digitalguide/websites/web-entwicklung/python-pandas-dataframe-dropna/](https://www.ionos.at/digitalguide/websites/web-entwicklung/python-pandas-dataframe-dropna/) for AI/LLM consumption.