Столкновение с ошибками при выполнении понимания списка - PullRequest
0 голосов
/ 24 апреля 2020
features_with_na=[features for features in df_main.columns if df_main[features].isna().sum()>1]

Это понимание списка должно дать мне все столбцы с пропущенными значениями. При выполнении появляется следующая ошибка -

ValueError                                Traceback (most recent call last)
<ipython-input-26-0878dbe5183a> in <module>()
----> 1 features_with_na=[features for features in df_main.columns if df_main[features].isna().sum()>1]

1 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in __nonzero__(self)
   1477     def __nonzero__(self):
   1478         raise ValueError(
-> 1479             f"The truth value of a {type(self).__name__} is ambiguous. "
   1480             "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
   1481         )

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Есть идеи?

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Не используйте списочное понимание, когда вам не нужно:

# sample data
df = pd.DataFrame(np.random.rand(10,3), columns=list('abc'))
df.iloc[3, 2] = np.nan
df.iloc[5, 1] = np.nan
df.iloc[6, 1] = np.nan
# just use boolean indexing
df.columns[df.isna().sum() > 1]

# Index(['b'], dtype='object')
1 голос
/ 24 апреля 2020

pd.DataFrame.isna при вызове для серии Pandas возвращает итерируемое логическое значение, равное по длине количеству записей в кадре данных

#calling isna on column returns series like [True, False, True, True...] equal to
#number of elements in df
df_features = [df_main[feature].isna() for feature in df_main.columns]

counts = [ftr[ftr == False].sum() in df_features]

Я бы порекомендовал использовать решение из комментарии, но этот ответ возвращает понимание списка, которое вы хотели

...