Ошибка с оператором &: "object of type 'generator' has no len()"
Когда пишу вот так, то все работает:
np.random.seed(242)
s = pd.Series(np.random.normal(size=100) ** 3, index=[x * 3 for x in range(100)])
print(s[(x % 2 != 0 for x in s.index) & (s < 2.6)].sum())
Но если изменить and на & выдает такую ошибку:
object of type 'generator' has no len()
У меня ведь нет len(), в чем дело?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Суть ошибки в том, что вы пытаетесь использовать оператор побитого И (&) по отношению к generator и pandas.Series:
In [54]: type( (x % 2 != 0 for x in s.index) )
Out[54]: generator
In [55]: type( (s < 2.6) )
Out[55]: pandas.core.series.Series
попробуйте так:
In [41]: s[(s.index % 2 != 0) & (s < 2.6)].sum()
Out[41]: -15.150748101821666
если есть непреодолимое желание использовать циклы (что в Pandas чаще всего считается "моветоном"), то замените генератор на list comprehension:
In [46]: s[([x % 2 != 0 for x in s.index]) & (s < 2.6)].sum()
# NOTE:---> ^ ^
Out[46]: -15.150748101821666