4
respostas

TRABALHANDO COM PYTHON E MYSQL

Boa tarde pessoal!! Estou com o seguinte problema: fiz uma conexão com meu banco de dados e uma determinada consulta. Para selecioná-la e mostrá-la, usei os pandas com o seguinte codigo:


df = DataFrame(pesquisa.fetchall())

print(df)

A consulta realmente é printada e aparece, porém, como eu faço pra manipular e usar os dados dessas colunas? Por exemplo, quero que, num for, as colunas que comecem com a letra "A" resultem em um comando, e as com letra "B", outra coisa. Deu pra entender? no mais, obrigado.

4 respostas

Oiii Eduardo, como você está? Espero que esteja bem ^-^

Você pode utilizar a cláusula if para testar se o primeiro caractere da coluna começa com a letra desejada. Suponha o seguinte DataFrame fictício:

        pais   ano  populacao  medalhas  habitantes
0     Brasil  2005      170.1         1       170.1
1  Argentina  2006       30.5         3        30.5
2  Argentina  2005       32.2         3        32.2
3     Brasil  2006      172.6        17       172.6
4      Chile  2007       40.8        40        40.8
5      Chile  2008       42.0        42        42.0

Como exemplo, selecionarei apenas as colunas que começam com a letra p ou com a letra a. E caso a coluna comece com a letra p, somarei 1 + 1 e caso comece com letra a somarei 2 + 2. Tudo bem?

Isso em código fica da seguinte forma:

for nome_coluna in df:
    if nome_coluna[0].upper() == 'P':
        operacao = 1 + 1
        print(f'Resultado operacao:{operacao} - Nome da Coluna: {nome_coluna}')
    if nome_coluna[0].upper() == 'A':
        operacao = 2 + 2
        print(f'Resultado operacao:{operacao} - Nome da Coluna: {nome_coluna}')

No código acima pegamos o primeiro caractere da coluna, transformamos esse caractere em letra maiúscula(apenas no momento da comparação) e comparamos com a letra que queremos, que também está em maiúsculo. Para esse exemplo, teremos o seguinte resultado:

Resultado operacao:2 - Nome da Coluna: pais
Resultado operacao:4 - Nome da Coluna: ano
Resultado operacao:2 - Nome da Coluna: populacao

Observe que conseguimos filtrar as colunas conforme o proposto. E veja também que o resultado muda a depender da letra que a coluna começa.

Para pegar os dados dessas colunas utilize o nome da mesma. Por exemplo:

df['ano']

Espero ter te ajudado e qualquer dúvida é só dizer. Estou à disposição. Abraços e bons estudos!

Realmente ajudou, e agora comecei ir no caminho certo!! Muito obrigado, mas surgiram outras dúvidas: Oque esse "0" entre colchetes significa? A primeira letra? Ou é como a primeira posição de um vetor? Pq no caso, quero que ele leia várias colunas. Exemplo: Meu programa precisar ler várias colunas, e as que estivem com um status "x", será enviado um e-mail. Como eu faço pra ele ler uma coluna por uma, e enviar e-mail apenas para as que tem tal status? Acredito que nesse script que vc mandou, ele lê apenas a primeira coluna, não? Preciso que ele corra toda a tabela.., no caso, todas as colunas.

Não sei qual biblioteca vocês estão utilizando no curso, então estou assumindo que o for que a Nadia postou itera sobre as colunas e não linhas.

Essa linha realiza um 'loop' passando em cada coluna a cada execução... for nome_coluna in df:

Assim o conteúdo do bloco 'dentro' do for é executado várias vezes e a cada vez a variável nome_coluna recebe o nome de uma das colunas.

assim nome_coluna[0] é o primeiro elemento do nome da coluna, ou seja a primeira letra do nome da coluna.

O upper converte a letra para maiúscula, isso parece desnecessário se você tiver certeza que os nomes estão em minúsculas sempre, mas na prática geralmente não dá para ter certeza.

Se você souber o nome completo e exato (inclusive maiúsculas) das colunas poderia fazer direto algo como:

      if nome_coluna == 'pais':
         print( 'Coluna país')
      elif nome_coluna == 'ano':
         print( 'Coluna país')
      else:
         print( 'Coluna desconhecida')

Tome cuidado com a identação ao digitar, no python os espaços tem significado.Na segunda linha por exemplo,que o print está 'dentro' do if, ele (python) entende que a execução desta linha (da segunda) é condicionada a que o if de cima (da primeira) seja verdadeiro. O mesmo raciocínio vale para o elif (else if, ainda se ... ) e para o else (que será executado se todos os demais ifs 'falharem'.

Tudo depende do que você sabe sobre as tabelas e qual resultado você espera.

Perdão pela demora a te retornar, Eduardo. O 0 é para significar o primeiro elemento/posição, nesse caso, ele significa a primeira letra da coluna. No script de exemplo, ele está lendo todas as colunas da tabela. Isso ocorre quando faço:

for nome_coluna in df:

Após isso, é verificado se a primeira posição/letra da coluna começa com a letra P ou A.

if nome_coluna[0].upper() == 'P':

Como dito pelo Humberto, tudo depende de como suas colunas estão organizadas. Outro ponto, é saber se o status x sempre ficará na primeira letra do nome da coluna. Exemplo: xPeso, xQuantidade

Qualquer dúvida na execução de seu código, fique a vontade para postar aqui no fórum que tentamos te ajudar. Tudo bem?!

Abraços e bons estudos!