Ich habe einen Pandas-Datenrahmen mit den folgenden Spalten.
Date Time
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Wie kombiniere ich Daten ['Datum'] und Daten ['Uhrzeit'], um Folgendes zu erhalten? Gibt es eine Möglichkeit, dies zu tun pd.to_datetime
?
Date
01-06-2013 23:00:00
02-06-2013 01:00:00
02-06-2013 21:00:00
02-06-2013 22:00:00
02-06-2013 23:00:00
03-06-2013 01:00:00
03-06-2013 21:00:00
03-06-2013 22:00:00
03-06-2013 23:00:00
04-06-2013 01:00:00
Antworten:
Es ist erwähnenswert, dass Sie dies möglicherweise direkt einlesen konnten, z. B. wenn Sie using
read_csv
verwendet habenparse_dates=[['Date', 'Time']]
.Angenommen, dies sind nur Zeichenfolgen, können Sie sie einfach zusammenfügen (mit einem Leerzeichen), sodass Sie Folgendes anwenden können
to_datetime
:Hinweis: Überraschenderweise (für mich) funktioniert dies gut, wenn NaNs in NaT konvertiert werden, aber es ist erwähnenswert, dass die Konvertierung (möglicherweise unter Verwendung des
raise
Arguments).quelle
parse_dates=[['Start date', 'Start time'], ['End date', 'End time']])
. Pandas <3Die akzeptierte Antwort funktioniert für Spalten vom Datentyp
string
. Der Vollständigkeit halber: Ich stoße auf diese Frage, wenn ich suche, wie dies zu tun ist, wenn die Spalten Datentypen haben: Datum und Uhrzeit.quelle
time
Typ in Pandas finden. Ich habe eher eintimedelta
(und eindatetime
), in welchem Fall Sie sie nur hinzufügen müssen, siehe meine Antwortpd.datetime
ist veraltet und es wird empfohlen,datetime
stattdessen nur das Modul explizit zu importieren .Sie können dies verwenden, um Datum und Uhrzeit in derselben Spalte des Datenrahmens zusammenzuführen.
CSV-Datei mit zusammengeführten Spalten lesen Date_Time:
Sie können diese Zeile verwenden, um auch beide anderen Spalten beizubehalten.
quelle
date_parser
, zum Beispielparser = lambda date: pd.datetime.strptime(date, '%d-%b-%y %H:%M:%S')
Sie können die Spalten umwandeln, wenn die Typen unterschiedlich sind (Datum / Uhrzeit und Zeitstempel oder str) und to_datetime verwenden:
Ergebnis:
Beste,
quelle
Ich habe nicht genug Ruf, um jka.ne zu kommentieren, also:
Ich musste die Zeile von jka.ne ändern, damit es funktioniert:
Dies könnte anderen helfen.
Außerdem habe ich einen anderen Ansatz getestet,
replace
anstattcombine
:was im Fall des OP wäre:
Ich habe beide Ansätze für einen relativ großen Datensatz (> 500.000 Zeilen) zeitlich festgelegt, und beide haben ähnliche Laufzeiten, aber die Verwendung
combine
ist schneller (59s fürreplace
vs 50s fürcombine
).quelle
Die Antwort hängt wirklich davon ab, welche Spaltentypen Sie verwenden . In meinem Fall hatte ich
datetime
undtimedelta
.Wenn dies der Fall ist, müssen Sie nur die Spalten hinzufügen:
quelle
datetime
undtimedelta
. Die Hauptantwort stellt irgendwie fest, dass die Spalten Zeichenfolgen waren, oder vielleicht war es nur die Antwort, die für diejenige funktionierte, die die Frage gestellt hat.Sie können auch
datetime
ohne Verkettung von Zeichenfolgen konvertieren , indem Siedatetime
undtimedelta
Objekte kombinieren . In Kombination mitpd.DataFrame.pop
können Sie die Quellenserien gleichzeitig entfernen:quelle
Stellen Sie zunächst sicher, dass Sie die richtigen Datentypen haben:
Dann kombinieren Sie sie einfach:
quelle
Verwenden Sie die
combine
Funktion:quelle
Mein Datensatz hatte einige Tage lang Auflösungsdaten von 1 Sekunde und das Parsen mit den hier vorgeschlagenen Methoden war sehr langsam. Stattdessen habe ich verwendet:
Beachten Sie, dass die Verwendung von
cache=True
das Parsen der Daten sehr effizient macht, da meine Dateien nur einige eindeutige Daten enthalten, was für eine kombinierte Datums- und Zeitspalte nicht gilt.quelle
DATEN:
<TICKER>, <PER>, <DATE>, <TIME> , <OPEN>, <HIGH>, <LOW>, <CLOSE>, <VOL> SPFB.RTS, 1, 20190103,100100 , 106580.0000000,107260.0000000,106570.0000000 107230.0000000,3726
CODE:
quelle