Фрейм данных Pandas: идентифицируйте NaN и нулевые значения в одном заявлении

Есть ли способ объединить два утверждения df.isnull().sum() и (df == 0).sum(), чтобы получить следующий обзор?

Демо:

df = pd.DataFrame({'a':[1,0,0,1,3], 'b':[0,NaN,1,NaN,1], 'c':[0,0,0,0,NaN]})

df

    a   b       c
0   1   0.0     0.0
1   0   NaN     0.0
2   0   1.0     0.0
3   1   NaN     0.0
4   3   1.0     NaN

Ожидаемый результат:

a    2
b    3
c    5

Наверное, очень просто, но я не могу найти решение ... Спасибо за вашу помощь

Что плохого только в (df==0).sum() + df.isnull().sum()?

EdChum 01.05.2018 16:02
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
36
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы имеете в виду именно это:

In[27]:

(df==0).sum() + df.isnull().sum()
Out[27]: 
a    2
b    3
c    5
dtype: int64

РЕДАКТИРОВАТЬ

Благодаря @coldpseed за предложение вы также можете сделать следующее:

In[28]:
df[df!=0].isnull().sum()

Out[28]: 
a    2
b    3
c    5
dtype: int64

что более лаконично, я всегда был сторонником ясности, но иногда побеждает более короткий код.

df[df != 0].isnull().sum(), чтобы сделать это одним вызовом ... кстати, приятно вас видеть :)
cs95 01.05.2018 16:05

@ cᴏʟᴅsᴘᴇᴇᴅ спасибо, это кажется более аккуратным, я должен включить? Я взял долгий перерыв в SO после того, как был немного разочарован, а также был очень занят на работе, просто опустив ногу, образно говоря, в

EdChum 01.05.2018 16:06

Да, безусловно, это было предназначено для вас! Нам нужно вернуть наших старых ветеранов, лучшего времени для вашего возвращения нет.

cs95 01.05.2018 16:07

ох ... это именно то, что я искал. Я подозревал, что для этого запроса существует специальное выражение ржу не могу Спасибо за вашу помощь!

stomar02 01.05.2018 16:21

@ Stomar02 лучше не задумываться, здесь, используя +, результирующая серия будет естественным образом выровнена по своим индексам, поэтому это не так сложно, как кажется

EdChum 01.05.2018 16:23

Другой вариант:

>>> ((df == 0) | df.isnull()).sum()
a    2
b    3
c    5
dtype: int64
>>>

Также:

>>> (df.eq(0) | df.isnull()).sum()
a    2
b    3
c    5
dtype: int64
>>>

С fillna

df.fillna(0).eq(0).sum()
Out[8]: 
a    2
b    3
c    5
dtype: int64

Еще один изящный вариант (fillna май будет медленным на больших кадрах), но если производительность не является ключевой, это не имеет значения.

cs95 01.05.2018 16:09

Другие вопросы по теме