2017-08-04 2 views
1

Ich habe einen einfachen Pandas Datenrahmen:Pandas Scatter Plot: Indizes, Out-of-Bounds

simple df

delta, start_hour und end_hour sind all numpy.int64:

type(df.delta[0]) 
->numpy.int64 

Jedes Mal, wenn ich versuche, Verwenden Sie die Pandas-Methoden, um ein Streudiagramm zu erstellen, bekomme ich "IndexError: Indizes sind out-of-bounds". Zum Beispiel:

sc2 = df.plot.scatter(x=df.delta, y=df.start_hour) 

produziert:

IndexError Traceback (most recent call last) <ipython-input-118-4d521c29b97f> in <module>() ----> 1 sc2 = df.plot.scatter(x=df.delta, y=df.start_hour) ... /mnt/xarfuse/uid-116535/[edit]/pandas/core/indexing.pyc in maybe_convert_indices(indices, n) IndexError: indices are out-of-bounds

ich auch explizite Konvertierung zu Numpy Arrays versucht haben, wie es in this post beschrieben:

df_x = np.array(df['delta'].tolist()) 
df_y = np.array(df['start_hour'].tolist()) 
sc1 = df.plot.scatter(x=df_x, y=df_y) 

was den gleichen Fehler erzeugt.

Ich bin sicher, ich vermisse etwas wirklich einfach. Hilfe geschätzt!

Antwort

4

Beim df pass [ ‚delta‘] zu x wird es wie df[df['delta']] sein, die ein key error : not in index zurückgibt, so muss man einfach auf die Spaltennamen passieren Verfahren zu streuen, wie X- und Y-Werte, dh

sc2 = df.plot.scatter(x='delta', y='start_hour') 

Beispiel

df = pd.DataFrame({'delta':[162,9,9,38,691,58],'start_hour':[1,5,11,1,7,6],'last_hour':[3,5,11,2,19,7]}) 
sc2 = df.plot.scatter(x='delta', y='start_hour') 
plt.show() 

enter image description here

Wenn Sie das numpy Array übergeben wollen, dann suchen nicht dafür in df. d.h direclty verwenden plt.scatter zB

df_x = np.array(df['delta'].tolist()) 
df_y = np.array(df['start_hour'].tolist()) 
plt.scatter(x=df_x, y=df_y) 
plt.show() 

Hoffe, es hilft

+0

Sir es für Sie arbeiten? – Dark

+0

Danke! Das hat das Problem gelöst! – jbeldock