pandas.to_datetime: Daten aus 2 Spalten kombinieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
10211291
User
Beiträge: 25
Registriert: Montag 8. Juli 2019, 10:51
Wohnort: Berlin

Ich möchte die mit pandas datetime die Daten zweier Spalten kombinieren.

Die Datei "minimal_in.csv" ist die folgende:

Code: Alles auswählen

Year,Time
29.01.2001,13:31:24
29.01.2001,13:31:27
29.01.2001,13:31:29
29.01.2001,13:31:32
29.01.2001,13:31:34
Und ich habe es probiert mit:

Code: Alles auswählen

import pandas as pd
from datetime import datetime, timedelta

import pandas as pd

df = pd.read_csv('minimal_in.csv')
df.head(5)

df[['Year','Time']].apply(pd.to_datetime)
df.dtypes
oder alternativ mit:

Code: Alles auswählen

df_combine = df['Year','Time']
pd.to_datetime(df_combine)
Hat jemand eine Idee? Ich wäre euch mega dankbar !
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ist dein Ziel einen String zu erhalten der das Jahr (das eigentlich mehr als nur das Jahr ist) und die Zeit enthält?

Für die erste Kombination zum Beispiel so:

Code: Alles auswählen

import pandas as pd

df = pd.read_csv('minimal_in.csv', header=1)
df_combine = f"{df.columns[0]} {df.columns[1]}"
print(df_combine)
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
10211291
User
Beiträge: 25
Registriert: Montag 8. Juli 2019, 10:51
Wohnort: Berlin

Hey Dennis,

Danke dir!
Idealerweise hätte ich am Ende eine Spalte / Series vom Typ datetime64[ns], wo für jede Zeile einzeln die Werte aus "Year" und "Time" kombiniert werden.
Soweit ich das sehe, werden durch diese Funktion nur die Werte der ersten Zeile kombiniert und die Ausgabe ist 29.01.2001 13:31:24.

Viele Grüße,
Julia
Benutzeravatar
Dennis89
User
Beiträge: 1123
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo Julia,

ich stehe gerade etwas auf dem Schlauch. Du kannst über die Datei iterieren und damit jede Zeile für sich betrachten.

Code: Alles auswählen

import pandas as pd

df = pd.read_csv('minimal_in.csv')
for date in df['Year']:
    print(date)
Analog dazu kannst du mit der Zeit-Spalte umgehen. Das Zusammenführen bereitet mir gerade Probleme, eventuell hat hier noch einer Tipps, jetzt will ich es auch wissen. Vielleicht habe ich mich auch verrennt, das kommt ab und zu mal vor.

Hoffe ich konnte trotzdem etwas helfen.

Viel Erfolg noch.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Dennis89: Pandas benutzt man gerade um nicht mit Schleifen arbeiten zu müssen.

@10211291: Das löst man bereits beim einlesen. Schau Dir mal an was `read_csv()` so an Argumenten bezüglich parsen von Datums- und Zeitangaben hat. Da kann man auch gleich Spalten zusammenfassen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
10211291
User
Beiträge: 25
Registriert: Montag 8. Juli 2019, 10:51
Wohnort: Berlin

@ __blackjack__

Danke für den Tipp mit der Option parse_dates!

Das funktioniert jetzt super. Hier die Lösung:

minimal.csv:

Code: Alles auswählen

Year,Time
29.01.2001,13:31:24
29.01.2001,13:31:27
29.01.2001,13:31:29
29.01.2001,13:31:32
29.01.2001,13:31:34

Code: Alles auswählen

import pandas as pd
from datetime import datetime, timedelta

import pandas as pd

df = pd.read_csv('minimal_in.csv',parse_dates=[[0, 1]])
df.head(5)
Ausgabe df:

Code: Alles auswählen

Year_Time
0 	2001-01-29 13:31:24
1 	2001-01-29 13:31:27
2 	2001-01-29 13:31:29
3 	2001-01-29 13:31:32
4 	2001-01-29 13:31:34
Antworten