Was ist das Äquivalent von "select max (Spalte) aus Tabelle" in pytables

Ich habe einen Tisch mit einer ganzen Anzahl von numerischen Werten in ihm, ich weiß, ich könnte die Spalte extrahieren und eine max () auf sie, aber es gibt wahrscheinlich einen Weg, dies zu tun mit der In-Kernel-Methode. Ich kann es aber nicht finden.

  • In PyTables, wie man verschachtelte Array mit variabler Länge zu erstellen?
  • Verknüpfe zwei große pandas.HDFStore HDF5 Dateien
  • Zusammenführen von zwei Tabellen mit Millionen von Zeilen in Python
  • Wie lese / schreibe ich in eine Untergruppe mit einem HDF5Store?
  • Datenbank oder Tabellenlösung für temporäre Numpy Arrays
  • Pytables langsam auf Abfrage für nicht übereinstimmende Zeichenfolge
  • TypeError: 'list' Objekt ist beim Aufrufen einer Liste nicht aufrufbar
  • Was ist ein "Callable" in Python?
  • Warum haben wir kallierbare Gegenstände in Python?
  • 3 Solutions collect form web for “Was ist das Äquivalent von "select max (Spalte) aus Tabelle" in pytables”

    In dem Test, den ich gemacht habe, können Sie über zweimal schnellere Ergebnisse mit der iterrows Methode anstelle von wo erreichen:

    In [117]: timeit max(row['timestamp'] for row in table.iterrows(stop=1000000)) 1 loops, best of 3: 1 s per loop In [118]: timeit max(row['timestamp'] for row in table.where('(timestamp<=Tf)')) 1 loops, best of 3: 2.21 s per loop In [120]: timeit max(frames.cols.timestamp[:1000000]) 1 loops, best of 3: 974 ms per loop In [121]: timeit np.max(frames.cols.timestamp[:1000000]) 1 loops, best of 3: 876 ms per loop 

    Beachten Sie, dass oben Tf der 1000000 Eintrag dieser Spalte ist (was ein Float64 ist).

    Da die Frage nicht nach einer Vergleichsprüfung fragt, kann der Test getestet werden … Beachten Sie, dass die in der Frage vorgeschlagene Methode (Laden der Daten als numpy Array) noch etwas schneller ist (obwohl der Unterschied weniger als 3% beträgt und Wird für größere Datensätze weiter kleiner, ich habe nicht über 10 ^ 7 Zeilen getestet). Beste Ergebnisse, die ich gefunden habe, wo die max numpy Funktion (siehe oben).

    Ich würde auch gerne von einer effizienteren Methode lernen!

    Der schnellste Weg, den ich gefunden habe, ist dies durch die Indizierung Ihrer Tabelle auf die Cols, die Sie interessiert sind:

     table.cols.timestamp.createCSIndex() 

    Einmal indiziert, immer ein max ist fast sofort:

     max_timestamp = table.cols.timestamp[table.colindexes['timestamp'][-1]] 

    Dies wird zuerst der letzte (entsprechend dem größten Zeitstempel) Zeilenindex aus dem table.colindexes['timestamp'][-1] Ihrer Tabelle für die Zeitstempelspalte ( table.colindexes['timestamp'][-1] ) erhalten, und dann wird es gerade die Zeile holen table.cols.timestamp durch Indizierung in die entsprechende Spaltenreferenz ( table.cols.timestamp ).

    Von High Performance Data Management mit PyTables & Family (pdf):

     e = sum(row['col1'] for row in table.where(3<table.cols.col2<=20)) 

    Ändern Sie diese, um max() :

     e = max(row['col1'] for row in table.where(3<table.cols.col2<=20)) 
    Python ist die beste Programmiersprache der Welt.