3
respostas

Aula 4 Filtrando dados -

Nessa aula, quando eu executo o código abaixo

dados_residencial =  dados[selecao]
dados_residencial

me vem o seguinte erro:

/Users/lstorino/opt/anaconda3/envs/alura_pandas/lib/python2.7/site-packages/ipykernel_launcher.py:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
  """Entry point for launching an IPython kernel.
---------------------------------------------------------------------------
IndexingError                             Traceback (most recent call last)
<ipython-input-15-ebce47e5eefd> in <module>()
----> 1 dados_residencial =  dados[selecao]
      2 dados_residencial

/Users/lstorino/opt/anaconda3/envs/alura_pandas/lib/python2.7/site-packages/pandas/core/frame.pyc in __getitem__(self, key)
   2916         # Do we have a (boolean) 1d indexer?
   2917         if com.is_bool_indexer(key):
-> 2918             return self._getitem_bool_array(key)
   2919 
   2920         # We are left with two options: a single key, and a collection of keys,

/Users/lstorino/opt/anaconda3/envs/alura_pandas/lib/python2.7/site-packages/pandas/core/frame.pyc in _getitem_bool_array(self, key)
   2965         # check_bool_indexer will throw exception if Series key cannot
   2966         # be reindexed to match DataFrame rows
-> 2967         key = check_bool_indexer(self.index, key)
   2968         indexer = key.nonzero()[0]
   2969         return self._take(indexer, axis=0)

/Users/lstorino/opt/anaconda3/envs/alura_pandas/lib/python2.7/site-packages/pandas/core/indexing.pyc in check_bool_indexer(ax, key)
   2484         mask = isna(result._values)
   2485         if mask.any():
-> 2486             raise IndexingError('Unalignable boolean Series provided as '
   2487                                 'indexer (index of the boolean Series and of '
   2488                                 'the indexed object do not match')

IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

Como eu sou usuário de MAC pode ser alguma comida de bola no setup to Ambiente, mas acho que não...

Aí não consegui cumprir o resto da aula

3 respostas

Olá Luiz, boa tarde.

O objeto que você está filtrando é um pandas.series. Então, para filtrá-lo, você precisa usar o método .loc. Dessa forma:

dados_residencial =  dados.loc[selecao]
dados_residencial

Espero que dê certo.

abs

Ainda não deu... vindo daqui:

insira seu código aqui


selecao = dados['Tipo'].isin(residencial).head(10)
selecao

Roda ok!

selecao.shape
(10,)

E vai...

dados_residencial =  dados.loc[selecao]
dados_residencial

Mas aí vem o um erro (sem a mensagem com bg em vermelho) mas ainda com um erro mosntruoso

---------------------------------------------------------------------------
IndexingError                             Traceback (most recent call last)
<ipython-input-10-4c52595bc9c7> in <module>()
----> 1 dados_residencial =  dados.loc[selecao]
      2 dados_residencial

/Users/lstorino/opt/anaconda3/envs/alura_pandas/lib/python2.7/site-packages/pandas/core/indexing.pyc in __getitem__(self, key)
   1498 
   1499             maybe_callable = com.apply_if_callable(key, self.obj)
-> 1500             return self._getitem_axis(maybe_callable, axis=axis)
   1501 
   1502     def _is_scalar_access(self, key):

/Users/lstorino/opt/anaconda3/envs/alura_pandas/lib/python2.7/site-packages/pandas/core/indexing.pyc in _getitem_axis(self, key, axis)
   1867             return self._get_slice_axis(key, axis=axis)
   1868         elif com.is_bool_indexer(key):
-> 1869             return self._getbool_axis(key, axis=axis)
   1870         elif is_list_like_indexer(key):
   1871 

/Users/lstorino/opt/anaconda3/envs/alura_pandas/lib/python2.7/site-packages/pandas/core/indexing.pyc in _getbool_axis(self, key, axis)
   1513             axis = self.axis or 0
   1514         labels = self.obj._get_axis(axis)
-> 1515         key = check_bool_indexer(labels, key)
   1516         inds, = key.nonzero()
   1517         try:

/Users/lstorino/opt/anaconda3/envs/alura_pandas/lib/python2.7/site-packages/pandas/core/indexing.pyc in check_bool_indexer(ax, key)
   2484         mask = isna(result._values)
   2485         if mask.any():
-> 2486             raise IndexingError('Unalignable boolean Series provided as '
   2487                                 'indexer (index of the boolean Series and of '
   2488                                 'the indexed object do not match')

IndexingError: Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match

Na aula o video faz o passo a passa, mas nessa etapa, aparentemente tem um "algo mais.." que precisa ser parametrizado e eu ainda não consigo identificar o que é!

Oi Luiz.

Quando você fez

selecao = dados['Tipo'].isin(residencial).head(10)

A variável selecao foi criada e pelo que vi no seu output ela é uma pandas.series com 10 linhas.

Se seu objetivo for passar um filtro do DataFrame dados, você pode fazer assim:

selecao = dados['Tipo'].isin(residencial) #sem o .head(10)
selecao.shape #Vai te retornar um objeto booleano com o mesmo número de linhas que o dataFrame dados

Você pode conferir selecao e dados têm os mesmo número de linhas

if len(selecao) == len(dados):
    print("Mesmo numero delinhas")

Daí, você faz isso:

dados_residencial  = dados[selecao]

De qualquer forma, não estou lembrando do exercício que você está fazendo. Se caso não der certo, você pode me dar um resumo do que você está precisa fazer?

Abs