Ir para conteúdo
Fórum Script Brasil
  • 0

Trabalho com dados csv


Wilson Avila

Pergunta

Sou iniciante em programação e preciso separar uma série de dados importados do Excel (csv), os mesmos estão em 4 colunas e centenas de linhas.  Preciso identificar as linhas que tenham a coluna de dados em comum e separa-las em outra 'lista'. Tipo um filtro!! Para depois usar estes dados para fazer cálculos estatísticos.

Qual seria a sugestão de ferramenta ou formas de chegar a essa lista de dados?

Editado por Wilson Avila
Erro de digitação
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 1

nos exemplos da documentação do pandas parece que o grafico aparece depois do comando do pandas, mas comigo não esta funcionando assim, eu tenho que chamar o .show() do matplotlib para o grafico aparecer, se não for isso para vc, coloque o codigo para podermos avaliar

Link para o comentário
Compartilhar em outros sites

  • 1

seu codigo esta ainda bem cru (meme do joaquim)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 

tabela = [[2, 4, 2, 5], 
          [3, 0, 5, 7], 
          [0, 4, 2, 1], 
          [9, 6, 9, 1]] 

campos = ['A', 'B', 'C', 'D']

df = pd.DataFrame(np.array(tabela), columns=campos) 
# df = pd.read_csv("transito7.csv")

coluna_filtrada = df.loc[:, 'A']                                                                                       

ax = coluna_filtrada.plot()
plt.show()

fiz o codigo em cima de uma tabela basica apenas para demonstração, deixei comentada a linha para importar seu csv, mas você tem que altera a forma de filtrar a informação de acordo com seu dataframe

Link para o comentário
Compartilhar em outros sites

  • 1
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 

tabela = [[2, 4, 2, 5], 
          [3, 0, 5, 7], 
          [0, 4, 2, 1], 
          [9, 6, 9, 1]] 

campos = ['A', 'B', 'C', 'D']

df = pd.DataFrame(np.array(tabela), columns=campos) 
# df = pd.read_csv("transito7.csv")

coluna_filtrada = df.loc[:, 'A']                                                                                       

ax = coluna_filtrada.plot()
ax.set_position([.3, .3, .6, .6])
plt.show()

se baseia no codigo atualizado

Link para o comentário
Compartilhar em outros sites

  • 1

você teria que adaptar algumas coisas, já que o video não foi feito com pandas em mente

 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 

label = ['velocidade', 'classe', 'Faixa', 'dia' , 'hora']
data = [ 
        [106, 1, 2, 5, 0], 
        [87, 1, 3, 5, 0], 
        [78, 1, 3, 5, 1], 
        [74, 1, 3, 5, 1], 
        [75, 1, 3, 5, 1], 
        [88, 1, 2, 5, 2], 
        [130, 1, 2, 5, 2], 
        [76, 1, 2, 5, 3], 
        [77, 1, 3, 5, 3]
]

df = pd.DataFrame(data, columns=label)

d5 = df[label[3]]==5
media = df[d5].loc[:, (label[0], label[4])].groupby(label[4])

ax = media.mean().plot.bar()
plt.xticks(range(4), range(4))

for x,y in enumerate(media.mean()[label[0]]):                                                                          
    plt.text(x - .2,
             y + .7,
             f'{y:0.2f}')

plt.show()

 

Link para o comentário
Compartilhar em outros sites

  • 1

você pode fazer um input no terminal, e adicionar em qualquer lugar no grafico com

texto = input()
plt.text(x,
         y,
         f'{texto}:00hrs')

claro que você tem que levar em conta que isso deve ser feito antes de aparecer a janela do grafico, pois aqui comigo,  a janela do grafico trava a entrada do terminal

Link para o comentário
Compartilhar em outros sites

  • 1

acho que com curses é possivel

o input do python não permite essa edição de mensagem durante a entrada

você tambem pode colocar o campo de entrada dentro do grafico, isso já é um pouco complicado de explicar, eu já não vou saber

Link para o comentário
Compartilhar em outros sites

  • 0
Em 04/11/2019 em 22:29, ArteEN disse:

seu codigo esta ainda bem cru (meme do joaquim)


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 

tabela = [[2, 4, 2, 5], 
          [3, 0, 5, 7], 
          [0, 4, 2, 1], 
          [9, 6, 9, 1]] 

campos = ['A', 'B', 'C', 'D']

df = pd.DataFrame(np.array(tabela), columns=campos) 
# df = pd.read_csv("transito7.csv")

coluna_filtrada = df.loc[:, 'A']                                                                                       

ax = coluna_filtrada.plot()
plt.show()

fiz o codigo em cima de uma tabela basica apenas para demonstração, deixei comentada a linha para importar seu csv, mas você tem que altera a forma de filtrar a informação de acordo com seu dataframe

Consegui fazer o gráfico aparecer! só faltava  plt.show!! Ficou Show!!

Tem alguma forma de determinar a posição do gráfico na tela? Queria que aparecesse no canto superior  direito.

Link para o comentário
Compartilhar em outros sites

  • 0
19 minutos atrás, ArteEN disse:

ax.set_position([.3, .3, .6, .6])

só brincar com os numeros que você chega onde quer

Apareceu este erro!! NameError: name 'ax' is not defined e eu gostaria e que o quadro(janela) da figura que o gráfico esta dentro, ficasse em uma posição que poderia ver os outros dados gerados, tipo no canto superior direito e q não fosse tão grande!

Editado por Wilson Avila
Link para o comentário
Compartilhar em outros sites

  • 0
7 minutos atrás, ArteEN disse:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 

tabela = [[2, 4, 2, 5], 
          [3, 0, 5, 7], 
          [0, 4, 2, 1], 
          [9, 6, 9, 1]] 

campos = ['A', 'B', 'C', 'D']

df = pd.DataFrame(np.array(tabela), columns=campos) 
# df = pd.read_csv("transito7.csv")

coluna_filtrada = df.loc[:, 'A']                                                                                       

ax = coluna_filtrada.plot()
ax.set_position([.3, .3, .6, .6])
plt.show()

se baseia no codigo atualizado

resolvi assim:

df["hora"].value_counts().plot.barh().set_position([.3, .3, .6, .6])
Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite!

O que pode estar errado?

velocidade_media =(((df.loc[(df['dia'])==('2')]) & (df.loc[(df['hora'])==('23')])).mean()['velocidade'])
print(velocidade_media)

mensagem:

"C:\Users\wabro\PycharmProjects\trabalho transito\venv\Scripts\python.exe" "D:/PycharmProjects/untitled/teste pandas 07 nov.py"
C:\Users\wabro\PycharmProjects\trabalho transito\venv\lib\site-packages\pandas\core\ops\__init__.py:1115: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  result = method(y)
nan

Process finished with exit code 0
 

Em 06/11/2019 em 11:17, ArteEN disse:

O brigado!

Já consegui assim!!

mngr = plt.get_current_fig_manager()
mngr.window.geometry("400x400+950+0")
plt.show()

A janela ficou com 400X400 na posição 950 em x e 0 em y. No canto superior direito.

Link para o comentário
Compartilhar em outros sites

  • 0

sendo sincero não sei onde esta o erro,  para ajudar você pode evitar resolver o problema em uma unica linha, e dividir em variaveis para encontrar onde esta o erro

dia = df.loc[(df['dia'])==('2')]
hora = df.loc[(df['hora'])==('23')]
velocidade_media = (dia & hora).mean()['velocidade']

desse jeito fica mais facil apontar onde deve ser aterado

a ideia é ter um comando por linha, então se ainda não consegir identificar onde esta o problema com as tres linhas a cima, você pode separar mais os comando em 5 linhas

dia = df['dia']
dia2 = df.loc[dia==('2')]

hora = df['hora']
hora2 = df.loc[hora==('23')]

velocidade_media = (dia2 & hora2).mean()
velocidade_media2 = velocidade_media['velocidade']

 

Editado por ArteEN
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...