Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exercicio Semana 11 - Pandas #7

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

jessicabom
Copy link

Resolução exercício Semana 11 - Pandas



#Aqui criamos uma variável que armazena em uma lista (nome_colunas) as colunas existentes em um csv, sem a necessidade de copiar e colar os valores
nome_colunas = df.columns.tolist()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

qual a diferença do resultado entre um df.columns e um df.columns.tolist()?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eu usei o df.columns.tolist() porque já armazenei na variável nome_colunas.
Fiz isso para aproveitar essa função do pandas, porque com isso não precisei digitar o nome de todas as colunas.

Copy link
Collaborator

@manuellysuzik manuellysuzik Aug 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sim , compreendo. Mas o que quero dizer é que o to_list() e o .columns faz exatamente a mesma coisa. Ambos retornam uma Lista com o nome das colunas , porque optou por um ao invés do outro? 🤔

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Porque eu achei que o columns não fazia uma lista. Só o to_list. Mas faz sentido... não pensei que já estava OK com o columns.
Como eu ia pegar o resultado do columns, copiar e colar em uma variável, nem me toquei que, por si só, o resultado do columns já podia ser salvo em uma lista, haha.
(Shame, Shame, Shame)

Comment on lines +14 to +16
for coluna in nome_colunas:
if df[coluna].dtype == "object":
df[coluna] = pd.to_numeric(df[coluna].str.replace(",", ""), errors = "ignore")
Copy link
Collaborator

@manuellysuzik manuellysuzik Aug 15, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

essa parte tentar converter todas as colunas que tem o tipo object, isso inclui as colunas que DEVEM ser object e que não podem ser convertidas usando astype. Por isso usou to_numeric?

qual a diferença entre as duas funções?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

quando fiz o código, achei mais prático usar o to_numeric, porque ele identifica meio que "automaticamente" o que pode ser numérico e já coloca como float ou como int pela própria função. Da primeira vez usei com o coerce e vi que ele transformava o que de fato tinha que ser object em NaN. Depois refiz utilizando o "ignore". Meu pensamento foi: se o to_numeric identifica o que é numérico e faz a conversão, eu faço um for passando por todas as coluna da variável "nome_colunas" e se aquilo não puder ser um número, o to_numeric vai ignorar com o "ignore" e aquilo permanece como string ou o outro formato.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esse é uma ótima linha de pensamento!

Trago pra você outra análise então:

Se o ˋto_numericˋ detecta "automaticamente" se o valor pode ou não ser convertido, porquê os erros aconteceram? Quando tentamos converter com os astype se não for possível converter também recebemos erro. Em quê eles são diferentes?

Copy link
Author

@jessicabom jessicabom Aug 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Essa pergunta aqui pegou professora. Fui olhar a documentação pra entender a diferença e depois recorri ao chatGPT porque não estava muito claro. Mas lá vai o que eu entendi.
Os erros usando o "to_numeric" aconteceram porque ele encontrou no DataFrame elementos que não podiam ser convertidos para números naquelas colunas que eu especifiquei.

Pelo que vi aqui, em tese não teria muita diferença o recebimento de erro dos dois, porque por padrão o retorno do "to_numeric" e do "astype" pra erros é o raise, ou seja, quando eles encontram um elemento que não pode ser convertido para o tipo desejado eles retornariam um erro imediato, um "ValueError"(acho).

Mas, assim como o "to_numeric", também podemos configurar o "as_type" para ignorar os erros. Pelo que vi na documentação ele tem por padrão errors=raise, mas também pode receber errors=ignore.
Provavelmente, nesse caso, o problema maior aqui é que o to_numeric pode converter os valores para NaN se configurarmos o errors=coerce, enquanto o astype não pode receber isso. Então - se for isso e se eu não embananei tudo - usar o astype para a conversão acaba sendo duplamente mais seguro. Seria isso?


#Filtro aplicado para filtrar as faixas conforme solicitado no exercício. Adicionalmente foi criado um arquivo csv também
filtered_df = df[(df["Spotify Popularity"] > 80) & (df["Total Streams"] > 1000000)]
filtered_df.to_json("./filtered_list.json", index=False)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pq optou por usar index=False?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui eu copiei a mesma sintaxe que foi passada no "para-sala", mas lembrei que a professora disse que era pra não importar o número de índice do original, ou algo assim. Então mantive o index=False, como foi passado no para-sala.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isso mesmo! Kudos!

Copy link
Collaborator

@manuellysuzik manuellysuzik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🥳

@manuellysuzik manuellysuzik added the who? não possível encontrar o nome da aluna pelo seu username label Aug 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
who? não possível encontrar o nome da aluna pelo seu username
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants