Ableiten von neuen Daten von Pandas Datetime-Spalte

stimmen
0

Ich habe eine Spalte mit Zeitstempeln (in ms) in einem bekam pandasDatenrahmen. Aus dem Zeitstempel, versuche ich die Stunde, Minute, Tag der Woche und Monat des Zeitstempels in separaten Spalten abzuleiten.

Ich habe versucht , die mit applyFunktion über die Säule, aber ohne Erfolg. Also nahm ich einen sehr naiven (aber nicht sehr prägnant) Ansatz , um diese Spalten zu erstellen:

import pandas
import datetime

df=pd.DataFrame( {'time':[1401811621559, 1402673694105, 1402673749561, 1401811615479, 1402673708254], 'person':['Harry', 'Ann', 'Sue', 'Jeremy', 'Anne']})

df['time'] = pandas.to_datetime(df.time, unit='ms')
days = []
tod = []
month = []
minutes = []
for row in df['time']:
    days.append(row.strftime('%w'))
    tod.append(row.strftime('%H'))
    month.append(row.strftime('%m'))
    minutes.append(row.strftime('%M'))
##
df['dayOfWeek'] = days
df['timeOfDay'] = tod
df['month'] = month
df['minutes'] = minutes

Gibt es eine Möglichkeit, dies zu tun, die eher wie ist das?

df['dayOfWeek'] = df['time'].apply(strftime('%w'),axis = 1)

    Traceback (most recent call last):
    File <stdin>, line 1, in <module>
    NameError: name 'strftime' is not defined
Veröffentlicht am 13/06/2014 um 17:22
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
0

Ja, es ist, ändern leicht Ihren Code ...

def timeGroups(row):
    row['days'] = row['time'].strftime('%w'))
    #do the same thing for month,seconds,etc.
    return row
df['dayOfWeek'] = df['time'].apply(timeGroups,axis = 1)
Beantwortet am 13/06/2014 um 17:28
quelle vom benutzer

stimmen
1

Man könnte es auch eine Lambda-Funktion machen:

df['dayOfWeek2'] = df.time.apply(lambda x:x.strftime('%w'))

jetzt tippen

df.dayOfWeek2 == df.dayOfWeek

Ausbeuten

0    True
1    True
2    True
3    True
4    True
dtype: bool
Beantwortet am 13/06/2014 um 17:31
quelle vom benutzer

stimmen
2

Im Moment müssen Sie die Spalte in einer DatetimeIndex wickeln:

In [11]: dti = pd.DatetimeIndex(df['time'])

In [12]: dti.dayofweek
Out[12]: array([1, 4, 4, 1, 4])

In [13]: dti.time
Out[13]:
array([datetime.time(16, 7, 1, 559000), datetime.time(15, 34, 54, 105000),
       datetime.time(15, 35, 49, 561000), datetime.time(16, 6, 55, 479000),
       datetime.time(15, 35, 8, 254000)], dtype=object)

In [14]: dti.month
Out[14]: array([6, 6, 6, 6, 6])

In [15]: dti.minute
Out[15]: array([ 7, 34, 35,  6, 35])

etc.

Sehen Sie dieses Problem für die Herstellung dieser Methoden direkt bei einer Datetime - Serie.

Beantwortet am 13/06/2014 um 17:54
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more