Python - Select 2 columns in a Dataframe and classify them - python-3.x

I'm new in the programming world, and I'm doing some studies to gain knowledge in the area of Data Science.
I have a Dataframe with a lot of information, among it gender and age. I want to bring the amount of lines of each gender (male and female) and classify them as children (0 to> 12 years), young (12 to> 18 years) and adults (18+ years).
The result would be something like:
Children Female: x amount
Young Female: y amount
Adult Female: z amount
Children Male: n amount
Young Male: k amount
Adult Male: j amount
I'm lost to the point of not knowing if I have started correctly... I have created another dataframe with the two columns I need.
df2 = df[["Sex", "Age"]].copy()
Little stuck from here
EDIT (sorry about some terms in the code, they are in portugues but the code is understandable
I could solve the problem.
Here what I did from begining:
Creation of a new DF with only the informations I need:
df2 = df[["Sex", "Age"]].copy()
Creation of a function to classify the values:
def definition(age):
if age >= 18:
return 'Adulto'
elif age >= 12:
return 'Jovem'
return 'Criança'
Add the new column to the DF
df2['Classification'] = df2['Age'].map(definition)
and PRINT
print("A quantidade de crianças do sexo masculino é de {}".format(len(df2.loc[df2['Classification'] == 'Criança'].loc[df2['Sex'] == 'male'])))
print("A quantidade de crianças do sexo feminino é de {}".format(len(df2.loc[df2['Classification'] == 'Criança'].loc[df2['Sex'] == 'female'])))
print("A quantidade de jovens do sexo masculino é de {}".format(len(df2.loc[df2['Classification'] == 'Jovem'].loc[df2['Sex'] == 'male'])))
print("A quantidade de jovens do sexo feminino é de {}".format(len(df2.loc[df2['Classification'] == 'Jovem'].loc[df2['Sex'] == 'female'])))
print("A quantidade de adultos do sexo masculino é de {}".format(len(df2.loc[df2['Classification'] == 'Adulto'].loc[df2['Sex'] == 'male'])))
print("A quantidade de adultos do sexo feminino é de {}".format(len(df2.loc[df2['Classification'] == 'Adulto'].loc[df2['Sex'] == 'female'])))
Result:
A quantidade de crianças do sexo masculino é de 36
A quantidade de crianças do sexo feminino é de 32
A quantidade de jovens do sexo masculino é de 22
A quantidade de jovens do sexo feminino é de 23
A quantidade de adultos do sexo masculino é de 519
A quantidade de adultos do sexo feminino é de 259

I would create the classes for age using pandas.cut and then group by the two columns and check the size. Let me know if I can elaborate on anything.
bins = [1, 5, 10, 15]
group_names = ['Children', 'Young', 'Adult']
age_groups = pandas.cut(df2.Age, bins, labels=group_names)
df2['Age Groups'] = age_groups.tolist()
df2.groupby(['Gender','Age Groups']).size()
My familiarity with the nuances of pandas.cut is a bit rusty so the above bins are not exactly what you want. I suggest playing around with the data in a notebook to get them where you want them. The docs here are helpful https://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html

Related

Executable generated in pycharm doesn't work

I'm working on a python project in the pycharm environment, after finishing the script and checking if it was working and it is, I generated an executable using pyinstaller/auto py to exe, however, when I try to run it, it opens and closes quickly , without executing the code and the process does not appear in windows processes.
follow the script
I have already verified that there is no problem in my code and the CMD is not closing when completing the program, since it is not even starting.
import numpy as np
import smtplib
import email.message
import time
# Funções importantes para o projeto
def linha(tam=42):
return "-=" * tam
def cabeçalho(txt):
print(linha())
print(txt.center(84))
print(linha())
def corpo(txt):
print(txt.center(84))
print(linha())
def menu(lista):
corpo("<Menu Principal>")
corpo("<Escolha uma das opções de acordo com a quantidade de avaliaçãos que você já realizou>")
print("<Digite o número correspondente à opção desejada>")
c = 1
for item in lista:
print(f"{[ c ]} -> {item}")
c += 1
print(linha())
# Interface para o menu principal
cabeçalho("Inicializando...")
time.sleep(5)
cabeçalho("Qual nota você precisa para passar?")
time.sleep(2)
while True:
print(linha())
corpo("<O programa irá informar as notas das avaliação que você não realizou>")
corpo(""" Em caso de erro com o programa, informe o bug pela opção no menu principal
ou
entre em contato com o email Nota.necessaria2023#gmail.com""")
menu(["Primeira avaliação ", "Segunda avaliação", "Terceira avaliação", "Quarta avaliação",
"Reportar Bug/Sugestões para melhorias","Créditos", "Sair do Programa"])
# Entrada
while True:
opcao = input("Qual item você deseja?\n")
try:
opcao = int(opcao)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(opcao) == int:
break
# verificador de opção
# Números inexistentes
if opcao > 7 or opcao < 1:
print("Opção Inválida, selecione novamente")
print(linha())
time.sleep(0.5)
print("Retornando ao menu...")
print(linha())
time.sleep(3)
# Desligar o programa
if opcao == 7:
print(
"""<Desligando aplicação>
Aguarde..."""
)
time.sleep(3)
print("Programa Desligado, Obrigado por utilizar!")
break
print(linha())
# avaliação 1
if opcao == 1:
while True:
p1 = input("Digite aqui sua nota da avaliação 1\n")
try:
p1 = float(p1)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p1) == float:
break
if p1 > 10:
p1 = 10
print("Calculando...")
time.sleep(1)
for count in np.arange(0, 10, 0.1):
p2 = count + 0.1
n1 = (p1 + p2) / 2
if n1 == 6:
print(f"Sua p2 precisa ser: {p2:.2f}\n")
break
elif p2 == 10:
print("Você não obterá nota suficiente, tire %s para recuperar nas próximas avaliaçãos\n" % (p2))
if n1 == 6:
print("Você precisa tirar nota 6 na p3");
print("Você precisa tirar nota 6 na p4")
if n1 < 6:
for count in np.arange(0, 10, 0.1):
p3 = count + 0.1
p4 = count + 0.1
n2 = (p3 + p4) / 2
mf = (2 * n1 + 3 * n2) / 5
if mf >= 6:
print("Você precisa de, no mínimo, %s na p3 e %s na p4 para passar" % (p3, p4))
break
print(linha())
print("Operação Concluída")
input("Confirme para voltar ao menu")
print("Retornando ao menu...")
time.sleep(2)
# avaliação 2
if opcao == 2:
while True:
p1 = input("Digite aqui sua nota da avaliação 1\n")
try:
p1 = float(p1)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p1) == float:
break
while True:
p2 = input("Digite aqui sua nota da avaliação 2\n")
try:
p2 = float(p2)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p2) == float:
break
if p1 > 10:
p1 = 10
if p2 > 10:
p2 = 10
print("Calculando...")
time.sleep(1)
n1 = (p1 + p2) / 2
print(f"Sua média da N1 é: ", n1)
for count in np.arange(0, 10, 0.1):
p3 = count + 0.11
p4 = count + 0.1
n2 = (p3 + p4) / 2
mf = (2 * n1 + 3 * n2) / 5
if mf >= 6:
print(f"Você precisa de, no mínimo, {p3: .2f} na p3 e {p4: .2f} na p4 para passar sem ir para a AF")
break
for count in np.arange(0, 10, 0.1):
p3 = count + 0.1
p4 = count + 0.1
n2 = (p3 + p4) / 2
mf = (2 * n1 + 3 * n2) / 5
if mf >= 3:
print(f"Você precisa de, no mínimo, {p3: .2f} na p3 e {p4: .2f} na p4 para ir para a AF")
break
for count in np.arange(0, 10, 0.1):
AF = count + 0.1
maf = (mf + AF) / 2
if maf >= 5:
print(
f"Se você tirar a nota mínima para ir para a AF precisará de, no mínimo, {AF: .2f} para passar")
break
print(linha())
print("Operação Concluída")
input("Confirme para voltar ao menu")
print("Retornando ao menu...")
time.sleep(2)
# Avaliação 3
if opcao == 3:
while True:
p1 = input("Digite aqui sua nota da avaliação 1\n")
try:
p1 = float(p1)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p1) == float:
break
while True:
p2 = input("Digite aqui sua nota da avaliação 2\n")
try:
p2 = float(p2)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p2) == float:
break
while True:
p3 = input("Digite aqui sua nota da avaliação 3\n")
try:
p3 = float(p3)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p3) == float:
break
if p1 > 10:
p1 = 10
if p2 > 10:
p2 = 10
if p3 > 10:
p3 = 10
n1 = (p1 + p2) / 2
print("Calculando...")
time.sleep(0.5)
print("Sua média da N1 é: ", n1)
print("Calculando...")
time.sleep(1)
for count in np.arange(0, 10, 0.1):
p4 = count + 0.1
n2 = (p3 + p4) / 2
mf = (2 * n1 + 3 * n2) / 5
if mf >= 6:
print(f"Você precisa de, no mínimo, {p4: .2f} na p4 para passar sem ir para a AF")
break
for count in np.arange(0, 10, 0.1):
p4 = count + 0.1
n2 = (p3 + p4) / 2
mf = (2 * n1 + 3 * n2) / 5
if mf >= 3 and mf < 6:
print(f"Você precisa de, no mínimo, {p4: .2f} na p4 para ir para a AF")
break
if mf >= 3 and mf < 6:
for count in np.arange(0, 10, 0.1):
AF = count + 0.1
maf = (mf + AF) / 2
if maf >= 5 and maf <= 6:
print(f"Se você tirar a nota mínima para ir para a AF precisará de, no mínimo, {AF: .2f} para passar")
break
print(linha())
print("Operação Concluída")
input("Confirme para voltar ao menu")
print("Retornando ao menu...")
time.sleep(2)
# Avaliação 4
if opcao == 4:
while True:
p1 = input("Digite aqui sua nota da avaliação 1\n")
try:
p1 = float(p1)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p1) == float:
break
while True:
p2 = input("Digite aqui sua nota da avaliação 2\n")
try:
p2 = float(p2)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p2) == float:
break
while True:
p3 = input("Digite aqui sua nota da avaliação 3\n")
try:
p3 = float(p3)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p3) == float:
break
while True:
p4 = input("Digite aqui sua nota da avaliação 4\n")
try:
p4 = float(p4)
except ValueError:
print("Não é um número válido, Digite somente números válidos.")
if type(p4) == float:
break
if p1 > 10:
p1 = 10
if p2 > 10:
p2 = 10
if p3 > 10:
p3 = 10
if p4 > 10:
p4 = 10
n1 = (p1 + p2) / 2
print("Calculando...")
time.sleep(0.5)
print("A sua média da N1 é:", n1)
n2 = (p3 + p4) / 2
print("Calculando...")
time.sleep(0.5)
print("A sua média da N2 é:", n2)
mf = (2 * n1 + 3 * n2) / 5
print("Calculando...")
time.sleep(0.5)
print("A sua média final é:", mf)
print("Calculando...")
time.sleep(1)
if mf >= 6:
print("Você passou direto!")
elif mf >= 3 and mf < 6:
for count in np.arange(0, 10, 0.1):
AF = count + 0.1
maf = (mf + AF) / 2
if maf >= 5:
print(
f"Se você tirar a nota mínima para ir para a AF precisará de, no mínimo, {AF: .2f} para passar")
break
else:
print("Você reprovou")
print(linha())
print("Operação Concluída")
input("Confirme para voltar ao menu")
print("Retornando ao menu...")
time.sleep(2)
# Reportar Bugs e Sugestões
if opcao == 5:
print("Loading...")
time.sleep(5)
print("Reporte o bug")
print("Após enviar, espere alguns segundos para confirmação")
assunto_email = input("Digite o assunto do email:\n")
def enviar_email():
corpo_email = input("""
Para criar um parágrafo utilize:
<p>Parágrafo1</p>
<p>Parágrafo2</p>
""")
msg = email.message.Message()
msg['Subject'] = assunto_email
msg['From'] = 'Nota.necessaria2023#gmail.com'
msg['To'] = 'Nota.necessaria2023#gmail.com'
password = 'cbxhznbyqqeiovcw'
msg.add_header('Content-Type', 'text/html')
msg.set_payload(corpo_email)
s = smtplib.SMTP('smtp.gmail.com: 587')
s.starttls()
s.login(msg['From'], password)
s.sendmail(msg['From'], [msg['To']], msg.as_string().encode('utf-8'))
print('Email enviado')
enviar_email()
print(linha())
print("Operação Concluída")
input("Confirme para voltar ao menu")
print("Retornando ao menu...")
time.sleep(2)
# Créditos
if opcao == 6:
cabeçalho("Créditos")
print("Criado por: Enzo Gabriel (ManoKondz)")
print("Data de lançamento: 05/02/2023")
print("Versão: beta(v1.0)")
print("Agradecimentos: Matheus Pereira; Isaias do Amaral; João Vitor")
print(linha())
print("Operação Concluída")
input("Confirme para voltar ao menu")
print("Retornando ao menu...")
time.sleep(2)

Finding the cause of a tab error inside a Class

I was coding this simple 'Bank' program for my first exercise with classes in Python but when I run it, says:
tabError: inconsistent use of tabs and spaces in indentation
line 45
if self.datos[x]['nombre'] == nombre and self.datos[x]['idnum'] == idnum and self.datos[x]['email'] == email:^
I understand what it means, and I took a look on my code and tried to find if there was some problem with the methods, nevertheless I couldn't understand what is causing it, I believe something about the dictionaries has something to do with it. So this is my code:
class Cliente:
def __init__(self):
self.datos = []
def opciones(self):
menu = ['1: Mostrar saldo',
'2: Ingresar monto',
'3: Retirar monto',
'4: Cerrar']
for option in range(len(menu)):
print(option)
opc_escoger = int(input('Escriba el número de la opción que desee: '))
if opc_escoger == 1:
self.mostrar()
elif opc_escoger == 2:
self.Ingresar()
elif opc_escoger == 3:
self.retirar()
elif opc_escoger == 4:
print('Saliendo...')
exit()
elif opc_escoger == 5:
self.registrarse
self.opciones()
def registrarse(self):
print('REGISTRO')
nombre = input('Ingrese su nombre de usuario: ')
idnum = input('Ingrese su número de documento de identificación: ')
email = input('Ingrese su dirección de correo electrónico: ')
self.datos.append({'nombre':nombre, 'idnum':idnum, 'email':email, 'monto': 0})
def ingresar(self):
print('INGRESAR')
nombre = input('Ingrese su nombre de usuario: ')
idnum = input('Ingrese su número de documento de identificación: ')
email = input('Ingrese su dirección de correo electrónico: ')
for x in range(len(self.datos)):
if self.datos[x]['nombre'] == nombre and self.datos[x]['idnum'] == idnum and self.datos[x]['email'] == email:
print('Dinero actual: ', self.datos[x]['monto'])
monto = input('¿Cuál es el monto a ingresar?: ')
self.datos[x]['monto':monto]
else:
print('Los datos ingresados no coinciden con los de un usuario registrado')
self.registrarse()
#Here's some more code for the other methods, but are pretty similar to the 'ingresar' method

why my conditions do not display anything?

my code choose a random number and the user must find the random number
but if I write a bigger or smaller number it doesn't display anything
from random import *
nb_au_hasard = (randint(1, 50))
print(nb_au_hasard)
nb_choisi = (int(input("choisi un nombre entre 1 et 50")))
while nb_choisi == nb_au_hasard:
if nb_choisi < nb_au_hasard:
print("le nombre est plus grand")
else:
print("le nombre est plus petit")
if nb_choisi == nb_au_hasard:
print("tu as reussi ")
break

Loop in Loop - Performing an error check

The code checks for a User ID (id_usager). If it doesn't check out, it performs the else as an error catch. If it does check out, it calls in the other functions and prints ("Pour la personne"etc). That being said, I want my program to continue onto autreRecommandation afterwards, however as it stands, it exits after the aforementioned print.
while True:
id_check = True
while id_check:
id_usager = input("Entrer l'ID de l'usager pour lequel vous voulez une recommandation (entre 0 et {}): ".format(n - 1))
if id_usager.isdigit():
if int(id_usager) in range(n):
id_usager = int(id_usager)
calculer_scores_similarite(reseau)
print("Pour la personne", id_usager, ", nous recommandons l'ami", recommander(id_usager, reseau, matrice_similarite), ".")
return id_check == True
else:
print("Erreur: l'usager doit être un nombre entier entre ", 0, "et", n - 1, "inclusivement.\n")
else:
print("Erreur: l'usager doit être un nombre entier entre ", 0, "et", n - 1, "inclusivement.\n")
autreRecommandation = input("Voulez-vous une autre recommandation (oui/non)?")
if autreRecommandation.lower() == "oui":
return True
else:
print("Merci d'avoir utiliser le programme de recommandation d'amis.")
break
The return id_check == True statement will return control to the caller of your function.
Instead you could use the break statement to come out of the inner while loop and the control will then return to the outer while loop and go to autreRecommandation as expected.
The code could be more like
calculer_scores_similarite(reseau)
print("Pour la personne", id_usager, ", nous recommandons l'ami",recommander(id_usager, reseau, matrice_similarite), ".")
id_check == True
break
have you tried the keyword continue ?

If y in range Python Error Catching

I seem to be having an issue with an error catch that I'm trying to implement in my code. Basically, if somebody writes something out of the scope from the range, I want my error message to show up. Otherwise, it'll just continue on with the program.
Here's the code.
n = 10
while True:
id_usager = input("Entrer l'ID de l'usager pour lequel vous voulez une recommandation (entre 0 et {}): ".format(n-1))
if id_usager in range(n):
calculer_scores_similarite(reseau)
print("Pour la personne", id_usager, ", nous recommandons l'ami", recommander(id_usager, reseau, matrice_similarite))
continue
else:
print(id_usager)
print("Erreur: l'usager doit être un nombre entier entre ", 0, "et", n - 1, "inclusivement.\n")
This breaks, because you do not cast id_usager to an integer. Checking if it's in the range only works if it's an integer.
You can use s.isdigit() to check if you can safely convert to an integer, and then s = int(s) to do the conversion.
** edited based on comment
I found the trick.
while True:
id_usager = input("Entrer l'ID de l'usager pour lequel vous voulez une recommandation (entre 0 et {}): ".format(n - 1))
if id_usager.isdigit():
if int(id_usager) in range(n):
id_usager = int(id_usager)
calculer_scores_similarite(reseau)
print("Pour la personne", id_usager, ", nous recommandons l'ami", recommander(id_usager, reseau, matrice_similarite))
continue
else:
print("Erreur: l'usager doit être un nombre entier entre ", 0, "et", n - 1, "inclusivement.\n")
else:
print("Erreur: l'usager doit être un nombre entier entre ", 0, "et", n - 1, "inclusivement.\n")
This allows me to filter out the strings if there are in order to return an error message.

Resources