Über Tabellen iterieren mit Pandas?

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Rodrigo
User
Beiträge: 4
Registriert: Montag 15. April 2019, 13:21

Montag 15. April 2019, 14:04

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
Benutzeravatar
ThomasL
User
Beiträge: 609
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Montag 15. April 2019, 14:58

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
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Rodrigo
User
Beiträge: 4
Registriert: Montag 15. April 2019, 13:21

Montag 15. April 2019, 15:47

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.
Benutzeravatar
ThomasL
User
Beiträge: 609
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Montag 15. April 2019, 15:57

generiere aus der Datumsspalte eine neue Spalte, die nur das Datum ohne Zeit enthält und mach darüber ein groupby
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Rodrigo
User
Beiträge: 4
Registriert: Montag 15. April 2019, 13:21

Dienstag 16. April 2019, 08:52

Genau das schaffe ich leider nicht. Den Spaltenwert so zu beschneiden dass nur noch das Datum übrigbleibt
Benutzeravatar
ThomasL
User
Beiträge: 609
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Dienstag 16. April 2019, 12:59

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)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Rodrigo
User
Beiträge: 4
Registriert: Montag 15. April 2019, 13:21

Dienstag 16. April 2019, 15:37

Super, so funktionierts. Besten Dank für deine Bemühungen!
Antworten