В Python Pandas, как лучше всего проверить, имеет ли DataFrame одно (или несколько) значений NaN?
Я знаю о функции pd.isnan
, но это возвращает DataFrame логических значений для каждого элемента. Этот пост прямо здесь не совсем отвечает и на мой вопрос.
Ответы:
Ответ jwilner точен . Я искал, чтобы увидеть, есть ли более быстрый вариант, так как по моему опыту суммирование плоских массивов (как ни странно) быстрее, чем подсчет. Этот код кажется быстрее:
Например:
df.isnull().sum().sum()
немного медленнее, но, конечно, имеет дополнительную информацию - количествоNaNs
.источник
pandas
этого нет встроенной функции. Это правда из сообщения @ JGreenwell, котороеdf.describe()
может сделать это, но не имеет прямой функции.df.describe()
(не найдяNaN
с). При использовании массива 1000 x 1000 один вызов занимает 1,15 секунды.df.isnull().values.sum()
это немного быстрее, чемdf.isnull().values.flatten().sum()
.flatten()
постеры. Спасибо.df.isnull().values.any()
, для меня это быстрее, чем другие.У вас есть несколько вариантов.
Теперь фрейм данных выглядит примерно так:
df.isnull().any().any()
- возвращает логическое значениеВы знаете о том,
isnull()
что вернуло бы такой фрейм данных:Если вы сделаете это
df.isnull().any()
, вы можете найти только столбцы, которые имеютNaN
значения:Еще один
.any()
скажет вам, если что-либо из перечисленногоTrue
df.isnull().sum().sum()
- возвращает целое число от общего числаNaN
значений:Это работает так же, как
.any().any()
и, сначала давая суммирование количестваNaN
значений в столбце, затем суммирование этих значений:Наконец, чтобы получить общее количество значений NaN в DataFrame:
источник
.any(axis=None)
вместо.any().any()
?Чтобы узнать, какие строки имеют NaN в определенном столбце:
источник
non_nan_rows = df[df['name column'].notnull()]
.Если вам нужно узнать, сколько строк с «одним или несколькими
NaN
с»:Или, если вам нужно вытащить эти строки и изучить их:
источник
df.isnull().any().any()
должен сделать это.источник
Добавляя к Hobs блестящий ответ, я очень плохо знаком с Python и Pandas, поэтому, пожалуйста, укажите, если я не прав.
Чтобы узнать, какие строки имеют NaN:
будет выполнять ту же операцию без необходимости транспонирования, указав ось any () как 1, чтобы проверить, присутствует ли в строках 'True'.
источник
any(axis=1)
упрощение.Супер простой синтаксис:
df.isna().any(axis=None)
Начиная с v0.23.2 , вы можете использовать
DataFrame.isna
+,DataFrame.any(axis=None)
гдеaxis=None
указывает логическое сокращение по всему DataFrame.Полезные альтернативы
numpy.isnan
Еще один эффективный вариант, если вы используете старые версии панд.
В качестве альтернативы, проверьте сумму:
Series.hasnans
Вы также можете итеративно позвонить
Series.hasnans
. Например, чтобы проверить, есть ли в одном столбце NaN,И чтобы проверить, есть ли в каком-либо столбце NaN, вы можете использовать понимание с помощью
any
(это операция короткого замыкания).Это на самом деле очень быстро.
источник
Поскольку никто не упомянул, есть еще одна переменная с именем
hasnans
.df[i].hasnans
будет выводить,True
если одно или несколько значений в Серии панд NaN,False
если нет. Обратите внимание, что это не функция.версии панд "0.19.2" и "0.20.2"
источник
df = DataFrame([1,None], columns=['foo'])
, тоdf.hasnans
брошуAttributeError
, ноdf.foo.hasnans
вернусьTrue
.Поскольку
pandas
это нужно выяснитьDataFrame.dropna()
, я посмотрел, как они это реализуют, и обнаружил, что они использовалиDataFrame.count()
, что подсчитывает все ненулевые значения вDataFrame
. Ср исходный код панд . Я не тестировал эту технику, но думаю, что авторы библиотеки, вероятно, сделали мудрый выбор, как это сделать.источник
позвольте
df
быть именем DataFrame Pandas и любое значение, котороеnumpy.nan
является нулевым значением.Если вы хотите увидеть процент пустых значений в каждом столбце
df.loc[:,list(df.loc[:,df.isnull().any()].columns)].isnull().sum()/(len(df))*100
РЕДАКТИРОВАТЬ 1:
Если вы хотите увидеть, где ваши данные визуально отсутствуют:
источник
df.isna().sum()
?Просто используйте math.isnan (x) , верните True, если x - NaN (не число), и False в противном случае.
источник
math.isnan(x)
будет работать, когдаx
это DataFrame. Вы получаете TypeError вместо этого.Это даст вам счет всех значений NaN, присутствующих в соответствующих столбцах DataFrame.
источник
Вот еще один интересный способ найти нулевое значение и заменить его вычисленным значением.
источник
Я использую следующее и набираю тип, приводя его к строке и проверяя значение nan
Это позволяет мне проверять определенное значение в ряду, а не просто возвращать его, если оно содержится где-то в ряду.
источник
pandas.isna()
?Лучше всего было бы использовать:
Вот почему . Так
isna()
используется для определенияisnull()
, но оба они, конечно, идентичны.Это даже быстрее, чем принятый ответ и охватывает все двумерные массивы панд.
источник
Или вы можете использовать
.info()
наDF
таких , как:df.info(null_counts=True)
который возвращает количество строк non_null в столбцах, таких как:источник
источник
Проверим для каждого столбца, содержит ли он Nan или нет.
источник
Мы можем увидеть значение нуля , присутствующие в наборе данных пути создания Heatmap с помощью Сиборна модуля Heatmap
источник
Вы можете не только проверить, существует ли какое-либо «NaN», но также получить процент «NaN» в каждом столбце, используя следующую команду:
источник
В зависимости от типа данных, с которыми вы имеете дело, вы также можете просто получить значения значений для каждого столбца при выполнении EDA, установив для dropna значение False.
Хорошо работает для категориальных переменных, не так много, когда у вас много уникальных значений.
источник