Jump to content

Decode de decode porque não funciona?


jonhhy

Recommended Posts

Bom dia estimados membros da comunidade P@P,

 

hoje trago um exemplo da função decode() disponível neste site:

https://www.geeksforgeeks.org/python-pandas-series-str-decode/

 

Código do site:

# importing pandas as pd
import pandas as pd
  
# Creating the Series
sr = pd.Series([b"b'New_York'", b"b'Lisbon'", b"b'Tokyo'", b"b'Paris'", b"b'Munich'"])
  
# Creating the index
idx = ['City 1', 'City 2', 'City 3', 'City 4', 'City 5']

# set the index
sr.index = idx
  
# Print the series
print(sr)

Output do site:

City 1    b"b'New_York'"
City 2      b"b'Lisbon'"
City 3       b"b'Tokyo'"
City 4       b"b'Paris'"
City 5      b"b'Munich'"
dtype: object

Aplicando o decode aos dados:

# use 'UTF-8' encoding
result = sr.str.decode(encoding = 'UTF-8')
  
# print the result
print(result)

Resultado do site:

City 1    b'New_York'
City 2      b'Lisbon'
City 3       b'Tokyo'
City 4       b'Paris'
City 5      b'Munich'
dtype: object

Perante os resultados da função decode, pergunto-me senão podia também ter tirado o b' ' ... em:  b'WORD'  ? <- PERGUNTA

na dúvida optei por correr sobre o result,

Código feito por mim:

result2 = result.str.decode(encoding = 'UTF-8')

print(result2)
City 1   NaN
City 2   NaN
City 3   NaN
City 4   NaN
City 5   NaN
dtype: float64

Contudo, não era isto que pretendia ou tinha em mente ...

 

(vou,  

Link to comment
Share on other sites

  • 3 months later...

@jonhhy

Se vires com atenção, a definição das strings faz com que as mesmas incluam os caracteres b' e ' no seu interior. Portanto, os delimitadores b" (no início) e " (no final) de cada string são parte da sintaxe do programa, enquanto que os delimitadores b' (no início) e ' (no final) na realidade já fazem parte da string.

Como tal, quando utilizas o método decode() pela primeira vez, estás a transformar um objecto da classe bytes (criado com o o delimitador b" ... ") num objecto da classe str. Este, por sua vez, sendo uma string, não tem ao seu dispor esse método, pelo que uma segunda invocação devolve um resultado inválido (não vou tentar explicar por que motivo o resultado é NaN, presumo que o motivo diga respeito ao funcionamento interno da lib pandas).

Se pretendes remover os b' e ', deverás utilizar funções que te permitam manipular texto, e não conversão de tipos de dados. Aqui fica um exemplo simplificado, retirando a pandas da equação e lidando apenas com os tipos de dados de base (python 3):

>>> a = b"b'string'"
>>> b = a.decode(encoding = 'UTF-8')
>>> c = b.decode(encoding = 'UTF-8')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'str' object has no attribute 'decode'.
>>> print(a)
b"b'string'"
>>> print(b)
b'string'
>>> import re
>>> c = re.sub(r"^b'(.+?)'$", r'\1', b)
>>> print(c)
string

Espero ter ajudado.

 

Edited by pwseo
typo.
  • Vote 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.