Python-Pandas konvertieren den Index in datetime

77

Wie konvertiere ich einen Pandas-Index von Zeichenfolgen in das Datum / Uhrzeit-Format?

Mein Datenrahmen 'df' ist so

                     value          
2015-09-25 00:46    71.925000
2015-09-25 00:47    71.625000
2015-09-25 00:48    71.333333
2015-09-25 00:49    64.571429
2015-09-25 00:50    72.285714

aber der index ist vom typ string, aber ich brauche ein datetime format, weil ich den fehler bekomme

'Index' object has no attribute 'hour'

beim Benutzen

 df['A'] = df.index.hour
Stangenbohne
quelle
5
df.index.to_datetime()oder df.index = pandas.to_datetime(df.index)(Ersteres ist jetzt veraltet).
AChampion
Typ (df.index [1]) gibt immer noch 'str' zurück
Runner Bean
1
Die oben genannten Daten werden datetimeohne Probleme konvertiert type(df.index[1]) == pandas.tslib.Timestamp. Haben Sie schlechte Daten im Rest des Datenrahmens?
AChampion
1
Sie können auch das Format und einen Fehler kwag angeben. Die Dokumentation von pandas.to_datetimewird den Rest erklären.
Kartik

Antworten:

103

Es sollte wie erwartet funktionieren. Versuchen Sie, das folgende Beispiel auszuführen.

import pandas as pd
import io

data = """value          
"2015-09-25 00:46"    71.925000
"2015-09-25 00:47"    71.625000
"2015-09-25 00:48"    71.333333
"2015-09-25 00:49"    64.571429
"2015-09-25 00:50"    72.285714"""

df = pd.read_table(io.StringIO(data), delim_whitespace=True)

# Converting the index as date
df.index = pd.to_datetime(df.index)

# Extracting hour & minute
df['A'] = df.index.hour
df['B'] = df.index.minute
df

#                          value  A   B
# 2015-09-25 00:46:00  71.925000  0  46
# 2015-09-25 00:47:00  71.625000  0  47
# 2015-09-25 00:48:00  71.333333  0  48
# 2015-09-25 00:49:00  64.571429  0  49
# 2015-09-25 00:50:00  72.285714  0  50
Romain
quelle
3

Sie könnten explizit erstellen ein , DatetimeIndexwenn der Datenrahmen zu initialisieren. Angenommen, Ihre Daten liegen im Zeichenfolgenformat vor

data = [
    ('2015-09-25 00:46', '71.925000'),
    ('2015-09-25 00:47', '71.625000'),
    ('2015-09-25 00:48', '71.333333'),
    ('2015-09-25 00:49', '64.571429'),
    ('2015-09-25 00:50', '72.285714'),
]

index, values = zip(*data)

frame = pd.DataFrame({
    'values': values
}, index=pd.DatetimeIndex(index))

print(frame.index.minute)
blue_note
quelle
Zu Ihrer Information für Python3 benötigen Sieindex, values = zip(*data.items())
Addison Klinke
2

Ich gebe nur eine andere Option für diese Frage - Sie müssen '.dt' in Ihrem Code verwenden:

import pandas as pd

df.index = pd.to_datetime(df.index)

#for get year
df.index.dt.year

#for get month
df.index.dt.month

#for get day
df.index.dt.day

#for get hour
df.index.dt.hour

#for get minute
df.index.dt.minute

Muhammad Ammar Fauzan
quelle