Python Заменить значения NaN средним значением столбцов
В этой статье мы увидим метод замены значения NaN (не числа) средним значением столбцов. Если мы говорим об анализе данных, то обработка значения NaN является очень важным шагом. Итак, здесь вы узнаете о различных методах, с помощью которых мы можем заменить значение NaN (не число) средним значением столбцов.
Метод 1: использование Numpy.nanmean().
Пример
import numpy as np arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [np.nan, 8, 9]]) col_means = np.nanmean(arr, axis=0) arr_filled = np.where(np.isnan(arr), col_means, arr) print("Column mean: ",col_means) print("Final array: \n", arr_filled)
Выход
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
Объяснение
Здесь, в приведенном выше примере, мы используем функцию numpy.nanmean() для вычисления среднего значения столбца массива numpy вместе с определенной осью (здесь ось=0 означает столбцы). Чтобы определить значение NaN в массиве, мы использовали функцию numpy.isnan() и с помощью numpy.where() заменили значение NaN средними значениями столбцов. arr_filled — это результирующее значение после замены значения NaN средним значением столбца.
Метод 2: использование обхода и среднего значения по столбцу.
Пример
import numpy as np arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [np.nan, 8, 9]]) for i in range(arr.shape[1]): column = arr[:, i] column_mean = np.nanmean(column) column[np.isnan(column)] = column_mean print("Column mean: ",column_mean) print("Final array: \n", arr)
Выход
Column mean: 2.5 Column mean: 5.0 Column mean: 7.5 Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
Объяснение
Здесь, в приведенном выше примере, мы прошли цикл по каждому столбцу массива NumPy. Для каждого столбца мы вычисляем среднее значение столбца, используя этот столбец со средним значением. Мы присвоили значение columns_mean столбцу [np.isnan(column)].
Способ 3: использование Numpy.nan_to_num() и Numpy.mean().
Пример
import pandas as pd import numpy as np arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [np.nan, 8, 9]]) col_means = np.nanmean(arr, axis=0) arr_filled = np.nan_to_num(arr, nan=col_means) print("Column mean: ",col_means) print("Final array: \n", arr_filled)
Выход
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
Объяснение
Здесь, в приведенном выше примере, мы использовали метод numpy.nan_to_num(), который используется для замены значений NaN любым значением путем передачи значения столбца в качестве значения, которое мы хотим заменить. В результате arr_filled замененные значения столбца будут находиться вместо NaN.
Метод 4: Numpy.apply_along_axis() и среднее значение по столбцу.
Пример
import pandas as pd import numpy as np arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [np.nan, 8, 9]]) col_means = np.nanmean(arr, axis=0) def replace_nan(column): column[np.isnan(column)] = np.nanmean(column) return column arr_filled = np.apply_along_axis(replace_nan, axis=0, arr=arr) print("Column mean: ",col_means) print("Final array: \n", arr_filled)
Выход
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
Объяснение
Здесь, в приведенном выше примере, мы использовали метод numpy.apply_along_axis(), чтобы применить функцию replace_nan() к каждому столбцу массива NumPy с определенной осью (здесь ось=0 означает столбцы). Функция replace_nan() заменяет значение NaN в каждом столбце средним значением столбца.
Метод 5: Numpy.nanmean() и необычное индексирование.
Пример
import pandas as pd import numpy as np arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [np.nan, 8, 9]]) col_means = np.nanmean(arr, axis=0) mask = np.isnan(arr) arr[mask] = col_means[np.newaxis, :].repeat(arr.shape[0], axis=0)[mask] print("Column mean: ",col_means) print("Final array: \n", arr)
Выход
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
Объяснение
Здесь, в приведенном выше примере, мы использовали функцию numpy.repeat() для повторения значений столбца с массивом строк NumPy для соответствия форме исходного массива. Затем мы используем причудливую индексацию, чтобы заменить значения NaN средним значением столбца в массиве. Этот процесс не требует дополнительного места, поскольку он выполняет изменения на месте.
Метод 6: Numpy.nanmean() и вещание.
Пример
import pandas as pd import numpy as np arr = np.array([[1, 2, np.nan], [4, np.nan, 6], [np.nan, 8, 9]]) col_means = np.nanmean(arr, axis=0) mask = np.isnan(arr) arr[mask] = col_means print("Column mean: ",col_means) print("Final array: \n", arr)
Выход
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
Объяснение
Здесь, в приведенном выше примере, мы использовали метод широковещания для замены значения NaN на значение столбца в массиве NumPy. В программе создается переменная mask для идентификации значений NaN, и мы присваиваем значение среднего значения столбца нужному месту в массиве.
Итак, мы познакомимся с различными методами, с помощью которых мы можем заменить значение NaN средним значением столбцов в массиве NumPy. Каждый метод предоставляет нам уникальный подход к замене значения NaN. Вы можете выбрать любой метод в соответствии с вашими требованиями и простотой использования.
Все права защищены. © Linux-Console.net • 2019-2023
Pandas. Заменить NaN на среднее значение того же жанра игры
На начальном датасете в поле User_Count значение Nan замените средним значением количества пользователей среди игр того же жанра.
1 2 3
dataset1 = pd.read_csv('games_sales.csv') dataset1.fillna({'User_Count': np.mean('Genre' == genre)})
Почему заменяет не средним, а 0.0 и как это исправить? Заранее спасибо.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Pandas — заменить значение ключом словаря
Добрый день! Создать столбец B значения в котором определяются по словарю import pandas as pd.

Pandas Слияние с NaN
Доброго всем дня! Возник вопрос, на который пока ответ не придумывается: есть DataFrame df, нужно.
Pandas merge не учитывать nan
Добрый день. У меня вопрос по библиотеке pandas. Есть 2 df — слияние происходит на 2 столбцам: 1.

Заменить на NaN каждые пять строк до и после NaN
Здравствуйте! Я работаю с движениями глаз, на данный момент мне нужно обработать данные для.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Pandas. Найти количество стран, среднее значение температуры в которых бывает больше 100 градусов по Фаренгейту
Здравствуйте! Прошу помощи в решении вот такой задачи. Есть csv файл temp.csv, в котором.
Создание игры жанра sidescroller
чтобы учёба программированию шла веселей решил я делать игру на Юнити. что-то похожее на.
Разработка игры жанра платформер
Привет всем. В общем, дело такое, на курсач надо сделать игру на объектно-ориентированном языке.
Вопрос по созданию игры жанра roguelike
Всем привет, меня зовут Дмитрий. Итак, на C# я пока новичок, и хочу у вас узнать ответы на.
Присвоение координат NaN, NaN, Nan игровому объекту
Приветствую форумчане. Подскажите кто чем может. Делаю игру для Андроид. На сцене есть ряд.

Как заменить среднее значение на предопределенные слова
Прошу помочь: есть 2 таблицы: tabl1 (столбцы name, ocenka) name — имя, ocenka — число от 1 до 5.
Pandas: как заменить значения NaN в сводной таблице нулями
Вы можете использовать аргумент fill_value в pandas, чтобы вместо этого заменить значения NaN в сводной таблице нулями.
Для этого можно использовать следующий базовый синтаксис:
pd.pivot_table(df, values='col1', index='col2', columns='col3', fill_value= 0 )
В следующем примере показано, как использовать этот синтаксис на практике.
Пример: замена значений NaN в сводной таблице нулями
Предположим, у нас есть следующий кадр данных pandas, который содержит информацию о различных баскетболистах:
import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame print(df) team position points 0 A G 4 1 A G 4 2 A F 6 3 A C 8 4 B F 9 5 B F 5 6 B F 5 7 B F 12
Мы можем использовать следующий код для создания сводной таблицы в pandas, которая показывает среднее значение очков для каждой команды и позиции в DataFrame:
#create pivot table df_pivot = pd.pivot_table(df, values='points', index='team', columns='position') #view pivot table print(df_pivot) position C F G team A 8.0 6.00 4.0 B NaN 7.75 NaN
Обратите внимание, что в сводной таблице есть два значения NaN, потому что в исходном кадре данных нет игроков с позициями C или G в команде B, поэтому обе эти позиции имеют значения NaN в сводной таблице.
Чтобы заполнить эти значения NaN нулями в сводной таблице, мы можем использовать аргумент fill_value :
#create pivot table with zeros instead of NaN values df_pivot = pd.pivot_table(df, values='points', index='team', columns='position', fill_value= 0 ) #view pivot table print(df_pivot) position C F G team A 8 6.00 4 B 0 7.75 0
Обратите внимание, что каждое из значений NaN из предыдущей сводной таблицы заполнено нулями.
Примечание.Полную документацию по функции pandas pivot_table() можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:
Python pandas. Замена значения столбца на среднее значение по двум столбцам
Мне нужно заменить все значения в колонке Numb, которые не удовлетворяют условию Numb = (1,2,3). Заменить нужно на наиболее часто встречающимся значением по колонке Numb и City. Т.е для Numb = 1, т.к. для City Пит значения Num = 1, 1, -1 (наиболее часто встречающиеся 1). Были попытки что-то типа такого:
for idx, row in S1[-S1['Numb'].isin([1, 2, 3])].iterrows(): S1.at[idx, 'Numb'] = S1[S1['City'] == S1.at[idx, 'City']] == S1.at[idx]['Numb'].mode()[0]
Вылетает с ошибкой: TypeError: _get_value() missing 1 required positional argument: ‘col’ Заранее спасибо 🙂