461 Stimmen

Konvertierung zwischen datetime, Timestamp und datetime64

Wie konvertiere ich eine numpy.datetime64 Objekt zu einem datetime.datetime (oder Timestamp )?

Im folgenden Code erstelle ich die Objekte datetime, timestamp und datetime64.

import datetime
import numpy as np
import pandas as pd
dt = datetime.datetime(2012, 5, 1)
# A strange way to extract a Timestamp object, there's surely a better way?
ts = pd.DatetimeIndex([dt])[0]
dt64 = np.datetime64(dt)

In [7]: dt
Out[7]: datetime.datetime(2012, 5, 1, 0, 0)

In [8]: ts
Out[8]: <Timestamp: 2012-05-01 00:00:00>

In [9]: dt64
Out[9]: numpy.datetime64('2012-05-01T01:00:00.000000+0100')

Hinweis: Es ist einfach, das Datum aus dem Zeitstempel zu ermitteln:

In [10]: ts.to_datetime()
Out[10]: datetime.datetime(2012, 5, 1, 0, 0)

Aber wie extrahieren wir die datetime o Timestamp von einer numpy.datetime64 ( dt64 )?

.

Update: ein etwas unangenehmes Beispiel in meinem Datensatz (vielleicht das motivierende Beispiel) scheint zu sein:

dt64 = numpy.datetime64('2002-06-28T01:00:00.000000000+0100')

die sein sollten datetime.datetime(2002, 6, 28, 1, 0) und nicht eine lange (!) ( 1025222400000000000L )...

1voto

Das hat mir gefallen

import pandas as pd

# Custom function to convert Pandas Datetime to Timestamp
def toTimestamp(data):
    return data.timestamp()

# Read a csv file
df = pd.read_csv("friends.csv")

# Replace the "birthdate" column by:
# 1. Transform to datetime
# 2. Apply the custom function to the column just converted
df["birthdate"] = pd.to_datetime(df["birthdate"]).apply(toTimestamp)

0voto

Einige Lösungen funktionieren gut für mich, aber Numpy wird einige Parameter veralten lassen. Die Lösung, die für mich besser funktioniert, ist, das Datum als Pandas datetime zu lesen und explizit das Jahr, den Monat und den Tag eines Pandas-Objekts zu extrahieren. Der folgende Code funktioniert in den meisten Fällen.

def format_dates(dates):
    dt = pd.to_datetime(dates)
    try: return [datetime.date(x.year, x.month, x.day) for x in dt]    
    except TypeError: return datetime.date(dt.year, dt.month, dt.day)

0voto

Markus Kaukonen Punkte 314

Der einzige Weg, wie ich es geschafft, eine Spalte "Datum" in Pandas Dataframe mit Zeitinformationen zu Numpy-Array konvertieren war wie folgt: (Datenrahmen wird aus der csv-Datei "csvIn.csv" gelesen)

import pandas as pd
import numpy as np

df = pd.read_csv("csvIn.csv")
df["date"] = pd.to_datetime(df["date"])
timestamps = np.array([np.datetime64(value) for dummy, value in df["date"].items()])

-2voto

yoder Punkte 7

In der tat, alle diese datetime typen können schwierig sein, und potenziell problematisch (muss sorgfältig verfolgen, Zeitzone Informationen). hier ist, was ich getan habe, obwohl ich zugeben, dass ich besorgt bin, dass zumindest ein Teil davon ist "nicht durch Design". auch, dies kann ein bisschen mehr kompakt als erforderlich gemacht werden. beginnend mit einer numpy.datetime64 dt_a:

dt_a

numpy.datetime64('2015-04-24T23:11:26.270000-0700')

dt_a1 = dt_a.tolist() # ergibt ein Datetime-Objekt in UTC, aber ohne tzinfo

dt_a1

datetime.datetime(2015, 4, 25, 6, 11, 26, 270000)

# now, make your "aware" datetime:

dt_a2=datetime.datetime(*list(dt_a1.timetuple()[:6]) + [dt_a1.microsecond], tzinfo=pytz.timezone('UTC'))

... und das kann natürlich bei Bedarf auf eine Zeile komprimiert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X