Подсчитать количество строк с NaN в pandas DataFrame? - PullRequest
1 голос
/ 06 февраля 2020

Имеет следующий рабочий код:

import datetime as dt
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

my_funds = [1, 2, 5, 7, 9, 11]
my_time = ['2020-01', '2019-12', '2019-11', '2019-10', '2019-09', '2019-08']
df = pd.DataFrame({'TIME': my_time, 'FUNDS':my_funds})

for x in range(2,3):
    df.insert(len(df.columns), f'x**{x}', df["FUNDS"]**x)

df = df.replace([1, 7, 9, 25],float('nan'))

print(df.isnull().values.ravel().sum())   #5 (obviously counting NaNs in total)
print(sum(map(any, df.isnull())))         #3 (I guess counting the NaNs in the left column)

Я получаю приведенный ниже кадр данных. Я хочу получить общее количество строк , с 1 или более NaN, которое в моем случае составляет 4 , для строк - [0, 2, 3, 4].

enter image description here

Ответы [ 3 ]

3 голосов
/ 06 февраля 2020

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

nan_rows = len(df[df["FUNDS"].isna() | df["x**2"].isna()])
3 голосов
/ 06 февраля 2020

Использование:

print (df.isna().any(axis=1).sum())
4

Пояснение : Сначала сравните пропущенные значения по DataFrame.isna:

print (df.isna())
    TIME  FUNDS   x**2
0  False   True   True
1  False  False  False
2  False  False   True
3  False   True  False
4  False   True  False
5  False  False  False

И проверьте, если в наименьшее количество строк равно True на DataFrame.any:

print (df.isna().any(axis=1))
0     True
1    False
2     True
3     True
4     True
5    False
dtype: bool

И последнее число True с на sum.

1 голос
/ 06 февраля 2020

Новая опция Series.clip

, чтобы взять один, когда имеется более одного NaN в строке

df.isna().sum(axis=1).clip(upper=1).sum()
#4
...