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