Что происходит в этом куске кода?
И далее такой код
confirmed.isnull().sum().where(lambda x : x!=0).dropna()
Кто-нибудь может объяснить, что делает этот код?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Данное выражение показывает количество NaN значений в столбцах. Столбцы, в которых NaN отсутствуют, удаляются.
Пояснение на примере датасета о пассажирах Титаника:
Исходный датасет:
In [26]: df = pd.read_csv(r"D:\work\ML\titanic\train.csv")
In [27]: df.head(3)
Out[27]:
PassengerId Survived Pclass Name Sex ... Parch Ticket \
0 1 0 3 Braund, Mr. Owen Harris male ... 0 A/5 21171
1 2 1 1 Cumings, Mrs. John Bradley (Florence... female ... 0 PC 17599
2 3 1 3 Heikkinen, Miss. Laina female ... 0 STON/O2. 3101282
Fare Cabin Embarked
0 7.2500 NaN S
1 71.2833 C85 C
2 7.9250 NaN S
[3 rows x 12 columns]
Выражение из вопроса:
In [28]: df.isnull().sum().where(lambda x: x!=0).dropna()
Out[28]:
Age 177.0
Cabin 687.0
Embarked 2.0
dtype: float64
Теперь пошагово:
In [31]: df.isnull()
Out[31]:
PassengerId Survived Pclass Name Sex ... Parch Ticket Fare Cabin Embarked
0 False False False False False ... False False False True False
1 False False False False False ... False False False False False
2 False False False False False ... False False False True False
3 False False False False False ... False False False False False
4 False False False False False ... False False False True False
.. ... ... ... ... ... ... ... ... ... ... ...
886 False False False False False ... False False False True False
887 False False False False False ... False False False False False
888 False False False False False ... False False False True False
889 False False False False False ... False False False False False
890 False False False False False ... False False False True False
[891 rows x 12 columns]
In [32]: df.isnull().sum()
Out[32]:
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
In [33]: df.isnull().sum().where(lambda x: x!=0)
Out[33]:
PassengerId NaN
Survived NaN
Pclass NaN
Name NaN
Sex NaN
Age 177.0
SibSp NaN
Parch NaN
Ticket NaN
Fare NaN
Cabin 687.0
Embarked 2.0
dtype: float64
In [34]: df.isnull().sum().where(lambda x: x!=0).dropna()
Out[34]:
Age 177.0
Cabin 687.0
Embarked 2.0
dtype: float64
То есть, данное выражение показывает сколько значений NaN в столбцах - столбцы, в которых NaN отсутствуют удаляются.
Альтернативное решение:
In [38]: df.isna().sum().loc[lambda ser: ser>0]
Out[38]:
Age 177
Cabin 687
Embarked 2
dtype: int64
