2016-12-05 4 views
1

ich Pandas Datenrahmen haben, wo eine Spalte in einem Format-String-Datum ist als untenPandas Serie: string Datum Unix-Sekunden Epoche

0    time 
1 September 20 2016 
2 September 20 2016  
3 September 19 2016  
4 September 16 2016 

Was für eine prägnante Art und Weise für den Ersatz Zeit in UNIX-Epoche Sekunden sein würde ?

Antwort

1

Sie können die Werte einer Spalte mit der Methode apply der Serie ändern, indem Sie ihr eine Funktion mit den Aktionen geben, die Sie an jeweils der Werte ausführen möchten.

Zur Verarbeitung von Datumsangaben können Sie dateutil.parser.parse verwenden, um beliebige Zeichenfolgen in datetime-Objekte zu parsen.

import datetime 
import pandas as pd 
from dateutil.parser import parse 

s = pd.Series(['September 20 2016', 
'September 20 2016', 
'September 19 2016', 
'September 16 2016']) 
df = pd.DataFrame(s) 

def dt2epoch(value): 
    d = parse(value) 
    epoch = (d - datetime.datetime(1970,1,1)).total_seconds() 
    return epoch  

df[0].apply(dt2epoch) # apples given function to each value of column 

Ergebnis:

0 1474329600 
1 1474329600 
2 1474243200 
3 1473984000 
Name: 0, dtype: float64 
1

Sie könnten versuchen to_datetime.

import pandas as pd 
your_df['time']=pd.to_datetime(your_df['time']) 

Edit: die Epoche von einem Datetime-Objekt zu erhalten, können Sie die Serie zu einem int64 Objekt konvertieren, das Ihnen die Anzahl der Nanosekunden seit der Epoche geben, und dividieren durch 10^9 (die Zahl von Nanosekunden in einer Sekunde).

import numpy as np 
your_df['time'] = (pd.to_datetime(your_df['time']).astype(np.int64)/10**9).astype(np.int64) 

Die letzte Konvertierung benötigt wird, wenn man es in ganzen Zahlen haben wollen (die Division geben Ihnen schwebt statt)

Hinweis: Wenn Sie NaT Objekten in Ihrer Zeitreihen haben, werden sie zeigen sich als Der ganzzahlige Wert -9223372036, und Sie möchten sie entweder im Voraus ausfiltern oder sie als NaN ausgeben lassen (in diesem Fall muss die resultierende Folge vom Typ float anstelle von int sein).

+0

I 'Unknown String-Format' Störung erhalten; Ich verwende format = '% B% d% Y' Argument, das korrekt zu sein scheint ... –

+1

Für mich funktioniert es mit den vier Zeichenfolgen, die Sie oben haben. Ist es möglich, dass Sie einige unsaubere Daten in der Spalte haben, d. H. Eine oder mehrere Zeilen, die nicht mit dem Zeichenfolgenmuster übereinstimmen? – ilmarinen

+0

Ah ja, ich habe den Formatfehler behoben, indem ich die fehlerhaften Daten bereinigt habe, aber Ihre obige Funktion liefert mir eine Reihe von Python-Datetime-Objekten statt epochalen Sekunden. –