Jump to content
Fórum Script Brasil
  • 0

Trabalho com dados csv


Question

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?

Edited by Wilson Avila
Erro de digitação
Link to post
Share on other sites

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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!

Edited by Wilson Avila
Link to post
Share on other 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 to post
Share on other 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 to post
Share on other 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']

 

Edited by ArteEN
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148674
    • Total Posts
      644490
×
×
  • Create New...