jonhhy Posted August 25, 2022 at 11:57 AM Report Share #627009 Posted August 25, 2022 at 11:57 AM 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 More sharing options...
pwseo Posted December 22, 2022 at 12:51 AM Report Share #629110 Posted December 22, 2022 at 12:51 AM (edited) @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 December 22, 2022 at 12:51 AM by pwseo typo. 1 Report Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now