2017-03-07 64 views
1

一个在我的数据框列的是D型细胞datetime64的格式 - 2011-01-01 00:00:00如何将一个Series对象传递给time.mktime?

'%Y-%m-%dT%H:%M:%S' 

现在,我要列在一个新的DF复制,和值转换为UTC时间戳。我曾尝试以下方法:

from pytz import utc, timezone 
from datetime import datetime 
from time import mktime 

input_dt = pd.to_datetime(df["BaseDateTime"]) 
input_dt 

mktime(timezone('US/Eastern').localize(input_dt).utctimetuple()) 
#OR 
mktime(utc.localize(input_dt).utctimetuple()) 

执行最后两个语句之后,它会引发以下错误:

AttributeError: 'Series' object has no attribute 'tzinfo' 

什么其他的方法,我应该用得到的该BaseDateTime山坳UTC时间戳数据框?

+0

也许需要'DF [ “BaseDateTime”] dt.tz_localize (“UT C')',勾选[docs](http://pandas.pydata.org/pandas-docs/stable/timeseries.html#working-with-time-zones) – jezrael

回答

0

datetime值转换为纪元值的一种好方法是通过从要转换的日期中减去历元时间来创建datetime.timedelta。该功能可以应用于pandas.Seriespandas.DataFrame的列。

代码:

import pandas as pd 
import datetime as dt 
from pytz import timezone 

def convert_naive_dt_to_utc_epoch(naive_dt, tz_info): 
    # assign proper timezone to datetime 
    aware = tz_info.localize(naive_dt).astimezone(timezone('UTC')) 

    # get a datetime that is equal to epoch in UTC 
    utc_at_epoch = timezone('UTC').localize(dt.datetime(1970, 1, 1)) 

    # return the number of seconds since epoch 
    return (aware - utc_at_epoch).total_seconds() 

测试代码:

data = [np.datetime64(x) for x in 
     "2016-10-18T13:44:59 2016-02-18T13:59:59".split()] 
series = pd.Series(data=data, name='Date') 

# apply the conversion function to series to create epoch series 
epoch_series = series.apply(
    lambda x: convert_naive_dt_to_utc_epoch(x, timezone('US/Eastern'))) 

print(epoch_series) 

结果:

0 1.476813e+09 
1 1.455822e+09 
Name: Date, dtype: float64 
相关问题