Как в датафрейме найти столбец с наибольшим числом Nan значений и вывести его индекс и количество таких значений
Работаю с большим csv файлом с помощью pandas. df.isnull().sum() выводит все столбцы, а как определить тот, где больше всего пропущенных значений?
Отслеживать
задан 23 апр 2022 в 19:05
15 3 3 бронзовых знака
Оксана, вы получили что хотели?
25 апр 2022 в 17:37
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
df.isnull().sum().idxmax()
Название столбца с максимальным количеством пропущенных значений
df.isnull().sum().max()
Вывод значения максимума в столбце
Отслеживать
ответ дан 24 апр 2022 в 9:45
593 3 3 серебряных знака 12 12 бронзовых знаков
Есть идея в том что бы пройтись по каждому столбцу, забрать все значения Nan, и присвоить финальное значения для каждого итератора столбца, наполняя ими список, а после вывести максимальное значение списка, например как вариант:
def nan(file_name): n_Max = #Ваше количество стобцов n = 1 i = 0 max_equal = [] with open(file_name, encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile, delimiter = ',') for row in reader: if row[f'Row'] == 'Nan': #Цикл проходится по таблице и забирает нужное значение в стобце row[n], ваше имя стобца должно совпадать с именем в таблице row[f'Row'] = i + 1 else: continue max_equal.append(row[f'Row']) n = n + 1 print(max(max_equal)) nan('file_name.csv')
Как найти строки с отсутствующими данными в Pandas Dataframe
При работе с Dataframe в Pandas можно столкнуться с ситуацией, когда данные не полные (отсутствует часть значений) и это не позволяет их анализировать. В этом уроке мы рассмотрим, как найти строки в Dataframe, у которых часть информации отсутствует.
Для начала давайте загрузим наш учебный пример:
import pandas as pd
url=’https://drive.google.com/file/d/1KXfupiJKql5Lc-D73KiiS_jEd_CNIW44/view?usp=sharing’
url2=’https://drive.google.com/uc?id=’ + url.split(‘/’)[-2]
df = pd.read_csv(url2)
df.info()
Это база данных по приложениям в Google Play и как вы видите, к примеру в столбце Rating, много пустых элементов.
Для отбора строк, где в одном указанном столбце, отсутствуют данные, мы можем воспользоваться стандартным инструментом фильтрации. К примеру, отберем те строки, по которым в столбце Current Ver нет информации:
df[df[‘Current Ver’].isnull()]
Однако, что делать, если нам нужно отобрать все строки, в которых хотя бы в одном из столбцов отсутствуют значения?
Для начала создадим новый Dataframe, в который поместим проверку на то, является ли информация в ячейке пустой или нет:
is_null = df.isnull()
Для каждой позиции мы получим результат False или True, где False – в ячейке есть данные, True – в ячейке NaN.
Как мы видели выше, в 15 строке у нас отсутствует информация о Current Ver, давайте проверим при помощи функции iloc, какие данные по 15 строке у нас в Dataframe is_null:
is_null.iloc[15,]
Все верно, по всем столбцам, кроме Current Ver, у нас False, а по столбцу Current Ver у нас True, так как в нем нет какой-либо информации.
Далее нам надо сформировать Series, которая нам послужит в дальнейшем фильтром, в которой значение True будет в случае, если хотя бы в одном столбце в строке нет данных, а False, если информация есть во всех столбцах:
row_with_null = is_null.any(axis=1)
Используя эту Series как фильтр, мы создаем новый Dataframe, в который переносим только те строки, в которых хотя бы в одном из столбцов есть NaN:
rows_with_null = df[row_with_null]
Готово, мы нашли все строки с отсутствующими данными в Dataframe. В качестве бонуса прикладываю ноутбук с текущего урока. Спасибо за внимание, комментарии приветствуются.
Как подсчитать пропущенные значения в Pandas DataFrame
Часто вас может заинтересовать подсчет количества пропущенных значений в кадре данных pandas.
В этом руководстве показано несколько примеров подсчета пропущенных значений с использованием следующего кадра данных:
import pandas as pd import numpy as np #create DataFrame with some missing values df = pd.DataFrame() #view DataFrame print(df) a b c 0 4.0 NaN 11.0 1 NaN 6.0 8.0 2 NaN 8.0 10.0 3 7.0 14.0 6.0 4 8.0 29.0 6.0 5 12.0 NaN NaN
Подсчитайте общее количество пропущенных значений во всем DataFrame
В следующем коде показано, как рассчитать общее количество пропущенных значений во всем DataFrame:
df.isnull().sum().sum () 5
Это говорит нам о том, что всего пропущено 5 значений.
Подсчитайте общее количество пропущенных значений в столбце
В следующем коде показано, как рассчитать общее количество пропущенных значений в каждом столбце DataFrame:
df.isnull().sum () a 2 b 2 c 1
Это говорит нам:
- Столбец «а» имеет 2 пропущенных значения.
- Столбец «b» имеет 2 пропущенных значения.
- Столбец «c» имеет 1 пропущенное значение.
Вы также можете отобразить количество пропущенных значений в процентах от всего столбца:
df.isnull().sum ()/ len(df)\* 100 a 33.333333 b 33.333333 c 16.666667
Это говорит нам:
- 33,33% значений в столбце «а» отсутствуют.
- 33,33% значений в столбце «b» отсутствуют.
- 16,67% значений в столбце «c» отсутствуют.
Подсчитайте общее количество пропущенных значений в строке
В следующем коде показано, как рассчитать общее количество пропущенных значений в каждой строке DataFrame:
df.isnull().sum (axis= 1 ) 0 1 1 1 2 1 3 0 4 0 5 2
Это говорит нам:
- В строке 1 отсутствует 1 значение.
- В строке 2 отсутствует 1 значение.
- В строке 3 отсутствует 1 значение.
- В строке 4 пропущено 0 значений.
- Строка 5 имеет 0 пропущенных значений.
- В строке 6 есть 2 пропущенных значения.
Проверка на наличие NaN в DataFrame в Pandas

Часто при работе с большими наборами данных, особенно теми, которые были получены из внешних источников, могут возникать проблемы с пропущенными или недоступными данными. В Python и библиотеке Pandas такие данные обычно представлены значением NaN (Not a Number).
Рассмотрим пример DataFrame:
import pandas as pd import numpy as np data = < 'A': [1, 2, np.nan], 'B': [5, np.nan, np.nan], 'C': [1, 2, 3] >df = pd.DataFrame(data)
В этом DataFrame в столбцах ‘A’ и ‘B’ есть значения NaN.
Варианты проверки наличия NaN
Вариант 1: isnull() и any()
Один из способов проверить наличие NaN в DataFrame — использовать функцию isnull() . Она возвращает другой DataFrame, где каждое значение это булево значение, указывающее, является ли соответствующее значение в исходном DataFrame NaN.
df.isnull()
Чтобы узнать, есть ли хотя бы одно значение NaN в DataFrame, можно использовать функцию any() , которая возвращает True, если хотя бы одно значение в DataFrame является True.
df.isnull().any().any()
Вариант 2: isna() и values
Альтернативный способ — использовать функцию isna() , которая аналогична isnull() . Однако, вместо второго any() можно использовать свойство values и функцию any() из numpy.
np.any(df.isna().values)
Оба этих способа позволяют эффективно проверить наличие значений NaN в DataFrame. Выбор между ними зависит от конкретной ситуации и личных предпочтений.