Seite 1 von 1

Über Tabellen iterieren mit Pandas?

Verfasst: Montag 15. April 2019, 14:04
von Rodrigo
Guten Tag Zusammen

Ich habe folgendes Problem:

Ich habe eine Tabelle in folgendem Format: (sample)

fk_zaehler datum ... fuss_out objectid
288115 U15G3063865 2019-03-17T07:00:00 ... 4.0 7917228
243741 Y2G14045587 2019-03-09T15:00:00 ... 0.0 7872854
167301 YSH18065716 2019-02-11T02:00:00 ... 1.0 7796414
185801 U15G3063873 2019-02-22T09:30:00 ... 6.0 7814913
139742 U15G3063870 2019-02-12T04:30:00 ... 0.0 7768855
227022 Y2H18106792 2019-03-06T05:00:00 ... 0.0 7856135
280229 U15G3104445 2019-03-19T22:00:00 ... 5.0 7909342
279192 Y2G14045586 2019-03-20T12:30:00 ... 0.0 7908305
196636 Y2G13124876 2019-02-23T10:00:00 ... 0.0 7825749
135939 U15G3063872 2019-02-08T22:00:00 ... 19.0 7765052

mit ca. 300'000 Zeilen und ca 8 Spalten. Die Tabelle beinhaltet Werte von Fussgänger und Fahrradzählsysteme der Stadt Zürich im Viertelstundentakt. Da mich aber lediglich die Werte für jeweils den ganzen Tag interessieren, würde ich diese gerne zusammenfassen. Das heisst mich interessiert in der Kolumne "datum" nur YYYY-MM-DD. Leider steht da ja noch die Zeit dahinter.

Frage:

Wie kann ich über diese Tabelle iterieren, und alle werte von zum Beispiel "fuss_out" für jeweils einen Tag zusammenzählen?
Stecke hier irgendwie fest und wäre froh wenn mir jemand helfen könnte.

Grüsse

Re: Über Tabellen iterieren mit Pandas?

Verfasst: Montag 15. April 2019, 14:58
von ThomasL
Dafür ist das Paket Pandas die beste Wahl.
http://pandas.pydata.org/pandas-docs/stable/

Tabelle einlesen mit z.B. pandas.read_csv()
die Datumsspalte in ein DateTime Object umwandeln
und dann ein .groupby über das Datum

Es gibt viele gute Tutorials auf Youtube, z.B dieses https://www.youtube.com/watch?v=vmEHCJofslg

Re: Über Tabellen iterieren mit Pandas?

Verfasst: Montag 15. April 2019, 15:47
von Rodrigo
Danke für die rasche Antwort.
Wenn ich die Datums Kolumne in ein DateTime-Object umwandle, ist aber immer noch die Zeit hintendran also kann ich das groupby noch nicht anwenden weil sie sonst auch nach zeit gruppiert werden und nicht nach Tag.

Re: Über Tabellen iterieren mit Pandas?

Verfasst: Montag 15. April 2019, 15:57
von ThomasL
generiere aus der Datumsspalte eine neue Spalte, die nur das Datum ohne Zeit enthält und mach darüber ein groupby

Re: Über Tabellen iterieren mit Pandas?

Verfasst: Dienstag 16. April 2019, 08:52
von Rodrigo
Genau das schaffe ich leider nicht. Den Spaltenwert so zu beschneiden dass nur noch das Datum übrigbleibt

Re: Über Tabellen iterieren mit Pandas?

Verfasst: Dienstag 16. April 2019, 12:59
von ThomasL
Habe mal deine Beispieldaten in eine Textdatei kopiert

Code: Alles auswählen

import pandas as pd

# deine Beispieldaten ohne ... in doppelter Anzahl
df = pd.read_csv('sample.txt', delimiter=' ', names=['S1', 'S2', 'Datum', 'S4', 'S5'], parse_dates=[2])

# summieren der Tageswerte der Spalte S4
# entweder so
df['Tag'] = df.Datum.dt.date
summe = df.groupby(['Tag']).S4.sum().to_list()

# oder ohne zusätzliche Spalte direkt so
summe = df.groupby(df.Datum.dt.date).S4.sum().to_list()
print(summe)

Re: Über Tabellen iterieren mit Pandas?

Verfasst: Dienstag 16. April 2019, 15:37
von Rodrigo
Super, so funktionierts. Besten Dank für deine Bemühungen!

Re: Über Tabellen iterieren mit Pandas?

Verfasst: Sonntag 28. April 2019, 19:16
von Rodrigo
Bin auf ein weiteres Problem gestossen und zwar möchte ich einen Graphen mit Matplotlib in meinem GUI plotten. Das habe ich hinbekommen jedoch schaffe ich es nicht die Daten zu aktualisieren wenn ich im GUI andere Daten auswähle, also irgendwie funktioniert das clear nicht. entweder wird gar nichts mehr geplottet oder es wird nichts am plot geändert. Weiss jemand wo ich das clearen muss oder was ich genau falsch mache?

Code: Alles auswählen

  ...Vorheriger Code irrelevant     


        if self.RadioButton1.isChecked() == True:
            axislabel = 'Temperatur [°C]'
            
            canvas.plot(u,v,x,axislabel)
            print("Radiobutton1")
          
        if self.RadioButton2.isChecked() == True:
            axislabel = 'Regendauer [min]'  
            
            canvas.plot(u,z,x, axislabel)    
            print("Radiobutton2")
        
        self.log.append("Aktualisiert: ")
        self.log.append(time.strftime("%d.%m.%Y %H:%M:%S"))

           
            
class Canvas(FigureCanvas):
    def __init__(self, parent = None, width =7, height = 7, dpi =100):

        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)

        FigureCanvas.__init__(self, fig)
        self.setParent(parent)


        #self.plot()



    def plot(self,u,o,x, axislabel):
        
        
        
        
        ax = self.figure.add_subplot(111)
        ax1 = self.figure.add_subplot(111)
        
        ax.clear()
        ax1.clear()
        
        ax1.set_ylabel('Personenfrequenz', color='b')
        ax1.tick_params('y', colors='b')
        ax1.set_xlabel('Datum')
    
       
        ax.set_ylabel(axislabel, color='r')
        
        ax.tick_params('y', colors='r')
        ax1 = ax.twinx()
        
        ax.plot(u,o, "r-")
        ax1.plot(u,x)
       
        
        plt.show() 

Re: Über Tabellen iterieren mit Pandas?

Verfasst: Donnerstag 2. Mai 2019, 10:51
von __blackjack__
@Rodrigo: Ein komplettes, lauffähiges, minimales Beispiel wäre nett, damit man das ausprobieren kann.

Das ``== True`` mach man übrigens nicht. Du brauchst da einen Wahrheitswert. `isChecked()` liefert einen Wahrheitswert. Der Vergleich mit `True` hat als Ergebnis genau den Wahrheitswert den `isChecked()` bereits zurückgegeben hat. Und wenn man das Gegenteil testen wollen würde, gibt es ``not`` zum negieren des `isChecked()`-Ergebnis.

In der `plot()`-Methode fügst Du anscheinend auch jedes mal einen neuen Subplot hinzu und clearst *den* – der ist doch aber zu dem Zeitpunkt noch neu, und damit leer.