2015-04-29 12 views
13

zeichne ich mit numpy und Pandas relativ neu bin (ich bin ein Experimentalphysiker so dass ich seit Jahren mit ROOT habe ...). Eine gemeinsame Handlung in ROOT ist ein 2D-Streudiagramm, wo eine Liste von x- und y- Werte angegeben, macht einen „heatmap“ Typ Streudiagramm einer Variablen im Vergleich zu den anderen.Erstellen Pandas Datenrahmen zwischen zwei Numpy Arrays, dann Streudiagramm

Wie wird diese am besten erreicht mit numpy und Pandas? Ich versuche, die Dataframe.plot() Funktion zu verwenden, aber ich bin zu kämpfen, um auch den Datenrahmen zu erstellen.

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

Zunächst hat dieser Datenrahmen Form (1,2), aber ich möchte es Form (5,2) haben. Wenn ich die Datenrahmen die richtige Form zu bekommen, ich bin sicher, dass ich die DataFrame.plot() Funktion herausfinden kann, zeichnen, was ich will.

+0

Es gibt keine Notwendigkeit, wie „Danke“ für Formalitäten ist " Bitte "usw. Auch keine Notwendigkeit," gelöst "in Ihre Frage aufzunehmen. Dies ist, was "Antwort akzeptieren" ist. –

Antwort

27

Es gibt eine Reihe von Möglichkeiten, Datenrahmen zu erstellen. Gegeben 1-dimensionalen Spaltenvektoren, können Sie einen Datenrahmen erstellen, indem sie eine dict, dessen Schlüssel Spaltennamen vorbei und deren Werte sind die 1-dimensionalen Spaltenvektoren:

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

Um das zu tun, was Sie wollen, ich wouldn Verwenden Sie die DataFrame-Zeichenmethoden nicht. Ich bin auch ein ehemaliger Experimentalphysiker, und aufgrund der Erfahrung mit ROOT denke ich, dass das von Ihnen gewünschte Python-Analog am besten mit Matplotlib erreicht werden kann. In matplotlib.pyplot gibt es eine Methode, hist2d(), die Ihnen die Art von Heatmap gibt, nach der Sie suchen.

Wie für den Datenrahmen zu schaffen, eine einfache Möglichkeit, es zu tun ist:

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

In Ergänzung, Sie PandasSerie, aber der Dataframe muss erstellt wurde verwenden können.

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

Dies ist ein weiterer Weg, die

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

Und auch helfen könnte, finde ich die Beispiele von karlijn (DatacCamp) sehr hilfreich

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) 
Verwandte Themen