2015-04-29 13 views
13

Sono relativamente nuovo con Numpy e Panda (sono un fisico sperimentale, quindi uso ROOT da anni ...). Un grafico comune in ROOT è un grafico a dispersione 2D in cui, dato un elenco di valori xey, crea un grafico a dispersione di tipo "heatmap" di una variabile rispetto all'altra.Creazione di panda Dataframe tra due array di Numpy, quindi tracciare il grafico a dispersione

Come è meglio farlo con Numpy e Pandas? Sto tentando di utilizzare la funzione Dataframe.plot(), ma non riesco nemmeno a creare il Dataframe.

import numpy as np 
import pandas as pd 
x = np.random.randn(1,5) 
y = np.sin(x) 
df = pd.DataFrame(d) 

Prima di tutto, questo dataframe ha forma (1,2), ma vorrei che avesse la forma (5,2). Se riesco a ottenere che il dataframe sia nella forma giusta, sono sicuro di poter capire la funzione DataFrame.plot() per disegnare quello che voglio.

+0

Non v'è alcuna necessità di formalità come "grazie", " per favore "ecc. Inoltre, non è necessario includere" risolto "nella tua domanda. Questo è ciò per cui "accettare la risposta" è per. –

risposta

27

Esistono diversi modi per creare DataFrames. Dato vettori colonna 1-dimensionali, è possibile creare una dataframe passando un dict le cui chiavi sono i nomi delle colonne ei cui valori sono i vettori colonna 1-dimensionali:

import numpy as np 
import pandas as pd 
x = np.random.randn(5) 
y = np.sin(x) 
df = pd.DataFrame({'x':x, 'y':y}) 
df.plot('x', 'y', kind='scatter') 
3

Al fine di fare quello che vuoi, io wouldn usare i metodi di tracciatura di DataFrame. Sono anche un ex fisico sperimentale e, in base all'esperienza con ROOT, penso che l'analogico Python che si desidera sia meglio realizzato usando matplotlib. In matplotlib.pyplot c'è un metodo, hist2d(), che ti darà il tipo di mappa di calore che stai cercando.

Per quanto riguarda la creazione del dataframe, un modo semplice per farlo è:

df=pd.DataFrame({'x':x, 'y':y}) 
2

Integrando, è possibile utilizzare pandaSerie, ma il dataframe deve essere stato creato.

import numpy as np 
import pandas as pd 

x = np.linspace(0,2*np.pi) 
y = np.sin(x) 

#df = pd.DataFrame() 
#df['X'] = pd.Series(x) 
#df['Y'] = pd.Series(y) 

# You can MIX 
df = pd.DataFrame({'X':x}) 
df['Y'] = pd.Series(y) 

df.plot('X', 'Y', kind='scatter') 

Questo è un altro modo che potrebbe aiutare

import numpy as np 
import pandas as pd 

x = np.linspace(0,2*np.pi) 
y = np.sin(x) 

df = pd.DataFrame(data=np.column_stack((x,y)),columns=['X','Y']) 

E inoltre, trovo gli esempi da karlijn (DatacCamp) molto utile

import numpy as np 
import pandas as pd 

TAB = np.array([[''  ,'Col1','Col2'], 
       ['Row1' , 1 , 2 ], 
       ['Row2' , 3 , 4 ], 
       ['Row3' , 5 , 6 ]]) 

dados = TAB[1:,1:] 
linhas = TAB[1:,0] 
colunas = TAB[0,1:] 

DF = pd.DataFrame(
    data=dados, 
    index=linhas, 
    columns=colunas 
) 

print('\nDataFrame:', DF)