-
Notifications
You must be signed in to change notification settings - Fork 32
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
base: main
Are you sure you want to change the base?
Conversation
|
||
|
||
#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() |
There was a problem hiding this comment.
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()
?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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? 🤔
There was a problem hiding this comment.
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)
for coluna in nome_colunas: | ||
if df[coluna].dtype == "object": | ||
df[coluna] = pd.to_numeric(df[coluna].str.replace(",", ""), errors = "ignore") |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isso mesmo! Kudos!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🥳
Resolução exercício Semana 11 - Pandas