Zastępowanie brakujących danych

Brakujące dane w ramce danych pandas są oznaczane przez wartość NaN (Not a Number).

Jednym ze sposobów jest usunięcie wierszy lub kolumn zawierających brakujące dane. Można to zrobić za pomocą metody dropna(), która pozwala na usunięcie wierszy lub kolumn, w zależności od parametrów podanych podczas jej wywołania.

Przykład:

import pandas as pd

# utworzenie ramki danych zawierającej brakujące dane
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5, 6], 'col2': [7, 8, None, 10, 11, 12]})

	col1	col2
0	1	7.0
1	2	8.0
2	3	NaN
3	4	10.0
4	5	11.0
5	6	12.0

# usunięcie wierszy zawierających brakujące dane
df = df.dropna()

print(df)

   col1  col2
0   1.0   7.0
1   2.0   8.0
3   4.0  10.0
4   5.0  11.0
5   6.0  12.0

Innym sposobem jest zastąpienie brakujących danych określoną wartością. Można to zrobić za pomocą metody fillna(), która pozwala na wypełnienie brakujących danych podaną wartością.

Przykład:

import pandas as pd

# utworzenie ramki danych zawierającej brakujące dane
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5, 6], 'col2': [7, 8, None, 10, 11, 12]})

	col1	col2
0	1	7.0
1	2	8.0
2	3	NaN
3	4	10.0
4	5	11.0
5	6	12.0

# zastąpienie brakujących danych wartością 0
df = df.fillna(0)

print(df)

   col1  col2
0   1.0   7.0
1   2.0   8.0
2   3.0   0.0
3   4.0  10.0
4   5.0  11.0
5   6.0  12.0

Metoda fillna() pozwala również na wypełnienie brakujących danych wartościami innymi niż stałe. Można na przykład wypełnić brakujące dane średnią arytmetyczną z danej kolumny lub wartością z poprzedniego lub następnego wiersza.

import pandas as pd

# utworzenie ramki danych zawierającej brakujące dane
df = pd.DataFrame({'col1': [1, 2, 3, 4, 5, 6], 'col2': [7, 8, None, 10, 11, 12]})

	col1	col2
0	1	7.0
1	2	8.0
2	3	NaN
3	4	10.0
4	5	11.0
5	6	12.0

# zastąpienie brakujących danych średnią arytmetyczną z danej kolumny
df['col2'] = df['col2'].fillna(df['col2'].mean())

	col1	col2
0	1	7.0
1	2	8.0
2	3	9.6
3	4	10.0
4	5	11.0
5	6	12.0

# zastąpienie brakujących danych wartością z poprzedniego wiersza
df['col2'] = df['col2'].fillna(method='ffill')


col1	col2
0	1	7.0
1	2	8.0
2	3	8.0
3	4	10.0
4	5	11.0
5	6	12.0

# zastąpienie brakujących danych wartością z następnego wiersza
df['col2'] = df['col2'].fillna(method='bfill')

	col1	col2
0	1	7.0
1	2	8.0
2	3	10.0
3	4	10.0
4	5	11.0
5	6	12.0