Метод Pandas DataFrame fillna() используется для заполнения значений NA/NaN с использованием указанных значений. Когда мы встречаем какие-либо значения Null, они заменяются значениями NA/NaN в DataFrame. Это вступает в игру, когда мы работаем с файлами CSV, а в науке о данных и машинном обучении мы всегда работаем с файлами CSV или Excel.
Что такое функция Pandas DataFrame fillna() в Python?
Чтобы заменить все значения NaN нулями в столбце фрейма данных Pandas, вы можете использовать метод fillna() DataFrame в Python.
Используя метод fillna() DataFrame, мы можем удалить значения NA/NaN, попросив пользователя ввести какое-то собственное значение, которым он хочет заменить значения NA/NaN в DataFrame. Он чем-то похоже на метод dropna(), где мы удалили данные, но здесь, в этом случае, мы просим пользователя ввести данные для замены значений NA/NaN.
Синтаксис
|
1 |
DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) |
Параметры
Метод fillna() принимает следующие семь параметров.
- value: это серия, dict, массив или DataFrame для заполнения вместо значений NaN.
- method: используется, если пользователь не передает никаких значений. Когда пользователи не передают никакого значения и задан параметр метода, Pandas заполняет место значением в индексе Forward или Previous index на основе значения, переданного в параметре метода.
- axis: этот параметр принимает целые или строковые значения для строк/столбцов. Формат ввода может быть 0 или 1, если мы передаем его как целое число, и «index» или «columns», если мы передаем его как строку.
- inplace: это логическое значение, которое вносит изменения в DataFrame, если для значения установлено True.
- limit: этот параметр имеет целочисленный тип данных, который используется для указания максимального количества последовательных заполнений значения NaN вперед или назад.
- downcast: требуется словарь, который определяет, к какому типу следует приводить тип данных. Например, как Float64 в int64.
- **kwargs: необязателен, он указывает, нужны ли нам какие-либо другие аргументы ключевого слова.
Возвращаемое значение
Метод fillna() ничего не возвращает, но удаляет значения NA/NaN.
Примеры программ с Pandas DataFrame fillna()
Напишем программу, показывающую работу Pandas DataFrame fillna().
Пример 1
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import pandas as pd import numpy as np df = pd.DataFrame([[np.nan, 200, np.nan, 330], [553, 734, np.nan, 183], [np.nan, np.nan, np.nan, 675], [np.nan, 3]], columns=list('abcd')) print(df) # Now trying to fill the NaN values with zeros. print("\n") print(df.fillna(0)) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
a b c d 0 NaN 200.0 NaN 330.0 1 553.0 734.0 NaN 183.0 2 NaN NaN NaN 675.0 3 NaN 3.0 NaN NaN a b c d 0 0.0 200.0 0.0 330.0 1 553.0 734.0 0.0 183.0 2 0.0 0.0 0.0 675.0 3 0.0 3.0 0.0 0.0 |
Здесь, во-первых, мы создали DataFrame, в который мы передали некоторые числовые значения и некоторые значения NA/NaN, затем мы использовали функцию fillna() для обработки данных в разделе NaN с использованием пользовательского ввода(здесь он 0).
После этого мы напечатали окончательный DataFrame после удаления значений NaN.
Пример 2
Напишем программу для распространения всех ненулевых значений DataFrame вперед или назад.
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import pandas as pd import numpy as np df = pd.DataFrame([[np.nan, 200, np.nan, 330], [553, 734, np.nan, 183], [np.nan, np.nan, np.nan, 675], [np.nan, 3]], columns=list('abcd')) print(df) # Now trying to fill the NaN value equal to 3. print("\n") print(df.fillna(method='ffill')) print("\n") print(df.fillna(3)) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
a b c d 0 NaN 200.0 NaN 330.0 1 553.0 734.0 NaN 183.0 2 NaN NaN NaN 675.0 3 NaN 3.0 NaN NaN a b c d 0 NaN 200.0 NaN 330.0 1 553.0 734.0 NaN 183.0 2 553.0 734.0 NaN 675.0 3 553.0 3.0 NaN 675.0 a b c d 0 3.0 200.0 3.0 330.0 1 553.0 734.0 3.0 183.0 2 3.0 3.0 3.0 675.0 3 3.0 3.0 3.0 3.0 |
Здесь, как мы видим в выводе, мы сначала напечатали стандартный DataFrame, а затем использовали форвард для заполнения параметра метода, а затем записали DataFrame.
После этого мы использовали параметр fillna(), чтобы заполнить все значения NaN значением 3.
NaN только в одном столбце DataFrame
Чтобы заполнить NaN только в одном столбце, выберите только этот столбец. В этом случае я использую inplace=True для изменения содержимого файла df.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import pandas as pd import numpy as np df = pd.DataFrame([[np.nan, 200, np.nan, 330], [553, 734, np.nan, 183], [np.nan, np.nan, np.nan, 675], [np.nan, 3]], columns=list('abcd')) print(df) # Now trying to fill the NaN value equal to 3. print("\n") newDF = df['c'].fillna(0) print(newDF) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
a b c d 0 NaN 200.0 NaN 330.0 1 553.0 734.0 NaN 183.0 2 NaN NaN NaN 675.0 3 NaN 3.0 NaN NaN 0 0.0 1 0.0 2 0.0 3 0.0 Name: c, dtype: float64 |
В этом примере мы заполнили значения NaN значениями 0 в столбце «c» DataFrame.
Применение ограничений к методу fillna()
Чтобы применить ограничение, мы должны передать такой аргумент, как limit = число. Он говорит интерпретатору просто применить метод fillna() к этой большей части последовательного заполнения значения NaN вперед или назад.
Возьмем limit = 2. Это означает, что значение NaN будет преобразовано в 0 в первых двух строках.
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import pandas as pd import numpy as np df = pd.DataFrame([[np.nan, 200, np.nan, 330], [553, 734, np.nan, 183], [np.nan, np.nan, np.nan, 675], [np.nan, 3]], columns=list('abcd')) print(df) # Now trying to fill the NaN value equal to 3. print("\n") print(df.fillna(0, limit=2)) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
a b c d 0 NaN 200.0 NaN 330.0 1 553.0 734.0 NaN 183.0 2 NaN NaN NaN 675.0 3 NaN 3.0 NaN NaN a b c d 0 0.0 200.0 0.0 330.0 1 553.0 734.0 0.0 183.0 2 0.0 0.0 NaN 675.0 3 NaN 3.0 NaN 0.0 |
Вы можете видеть, что значения NaN были удалены и заполнены нулями в первых двух строках. Из третьего ряда NaN все еще там.
Заключение

Функция Pandas DataFrame fillna() очень полезна, когда вы получаете CSV-файл, полный значений NaN. Это помогает очистить значения NaN по желанию пользователя. И в конечном итоге это помогает улучшить модели машинного обучения.
