2016-06-26 14 views
1

ich in Pandas folgenden Datenrahmen haben, das Array enthält es direkt aus einer SQLite Lesen db mit pd.read_sql():Wie zu lesen und Plot-Arrays von Pandas df schnell

 ArrayID Value 
0  0  0 
1  0  1 
2  0  2 
3  0  3 
4  0  4 
5  0  5 
6  1  0 
7  1  1 
8  1  2 
9  1  3 

ich wissen möchten schnelle Möglichkeit, die Arrays zu bekommen, damit ich es zeichnen kann:

Array0 [0,1,2,3,4,5] 

Array1 [0,1,2,3] 

der einzige Weg, ich denke, war (langsam wirklich, wenn die Tabelle 1000 Arrays mit Arrays unterschiedlicher auf Länge maxixum Länge von 500 hat) könnte:

import pandas as pd  
import matplotlib.pyplot as plt 

# loop on 
for id in df.ArrayID: 
    array = df.loc[df["ArrayID"]==id, "Value"].values() 
    plt.plot(array) 

plt.show() 

Oder ist die Matplotlib das Problem?

Antwort

1

Verwenden groupby die Gruppen in einem Aufruf, (statt vieler Anrufe df.loc und df['ArrayID'] == id) zu erhalten:

for aid, grp in df.groupby(['ArrayID']): 
    plt.plot(grp['Value'].values) 

Beachten Sie auch, dass plt.plot ist nicht sehr schnell. 1000 mal zu telefonieren kann sich ziemlich langsam anfühlen. Außerdem kann eine Handlung mit 1000 Zeilen nicht sehr verständlich aussehen. Möglicherweise müssen Sie die Menge (vielleicht durch Clustering oder Aggregation), die Sie visualisieren möchten, überdenken.


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

N, M = 500, 1000 
data = np.row_stack([np.column_stack(np.broadcast_arrays(i, 
    (np.random.random(np.random.randint(N))-0.5).cumsum())) for i in range(M)]) 
df = pd.DataFrame(data, columns=['ArrayID', 'Value']) 
for aid, grp in df.groupby(['ArrayID']): 
    plt.plot(grp['Value'].values) 
plt.show() 

enter image description here

+0

danke, es für meine Aufgabe gut funktioniert! Ich habe gerade plt.plot (grp ["Value"]) in plt.plot (grp ["Value"]. Values) geändert, so dass die x-Achse immer bei 0 für jedes Array beginnt. Würden Sie eine andere Lösung für ein schnelleres Plot in Python empfehlen? Ich weiß, dass die Menge der Linie für eine Handlung zu hoch ist. Aber ich frage mich, ob es möglich ist, in Python schneller zu plotten. – Hangon

+0

Tut mir leid, ich habe keinen besseren Vorschlag, obwohl das Ausführen des oben genannten Codes nicht zu schrecklich langsam schien. – unutbu

+0

danke dann werde ich bei deiner Lösung bleiben – Hangon

Verwandte Themen