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

  • 0
28 minutos atrás, ArteEN disse:

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']

 

Não apontou nenhum erro!!

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
 

Link para o comentário
Compartilhar em outros sites

  • 0

elementwise comparison failed...

é uma comparação que não é suportada agora, mas será no futuro, hoje você vai ter que fazer estas comparações de outras formas, você tem 3 comparações em seu codigo,  você pode começar a fazer o print do dia2, e depois hora2, e por ultimo velocidade_media

Link para o comentário
Compartilhar em outros sites

  • 0
Em 07/11/2019 em 23:54, Wilson Avila disse:

aux = df[df["dia"] == 5]
aux1 = df[df["hora"]==23]

Assim consigo separar os dias e horas, mas não consigo achar uma forma de separar as 23 horas dos dias 5!!!

Acertei!!


aux = df[(df["dia"] == 5 ) & (df["hora"] == 23)]

a velocidade media ficou assim 


print(aux.mean()["velocidade"])

Como posso criar um gráfico de velocidade média te todo o dia, por hora? Testei muita coisa mas sempre inverte a lista toda e não só o dia que foi escolhido!

Link para o comentário
Compartilhar em outros sites

  • 0

deu um trabalhinho chegar nisso aqui

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()
plt.xticks(range(4), range(4))                                                                                         
plt.show()

 

Link para o comentário
Compartilhar em outros sites

  • 0
4 horas atrás, ArteEN disse:

deu um trabalhinho chegar nisso aqui


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()
plt.xticks(range(4), range(4))                                                                                         
plt.show()

 

Deixei assim!! São 952mil linhas para tratar!!

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

pd.read_csv
df = pd.read_csv("transito8.csv")

label = ['velocidade', 'classe', 'Faixa', 'dia' , 'hora']

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

ax = media.mean().plot()
plt.title('Velocidade Média do Dia')
plt.xticks(range(24), range(24))
plt.show()

 

Ficou show!!

Tem como ficar em barras e o valor aparecer no topo delas?

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, ArteEN disse:

 

tem, para grafico com barra só usar


ax = media.mean().plot.bar()

 

para colocar os numeros vai ser um pouco mais complicado, veja este video

 

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

for barra in (d5,media):
    for b in barra.get_media:
        plt.text(b.get_x() + 0.3,
                b.get_height()+ 0.2,
                int (b.get_height()))

Desculpe incomodar novamente, mas o segundo for está dando erro!!

 

Link para o comentário
Compartilhar em outros sites

  • 0
3 minutos atrás, ArteEN disse:

isso é só mais um plt.text no grafico, ou você pode alterar o titulo do grafico

Não me fiz entender!! No caso a entrada de dados via input, só completar algo já escrito, como pedir  hora e induzir que seja hora fechada tipo __:00h. Lembro de ter visto algo parecido em C++, mas não achei nada...

Link para o comentário
Compartilhar em outros sites

  • 0
40 minutos atrás, ArteEN disse:

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

Está assim!     Que hora pretende passar pela Free Way?__:00 horas  23          , tem como preencher a hora no lugar dos traços e não depois como está?

Link para o comentário
Compartilhar em outros sites

  • 0

fala das horas que ficam no eixo? como o grafico é em barra, ele automaticamente gira as letras, bem você pode procurar no site do matplotlib, lá tem todos os exemplos que você pode necessitar

 

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,5k
×
×
  • Criar Novo...