如何将一个Series对象传递给time.mktime?
问题描述:
一个在我的数据框列的是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时间戳数据框?
答
将datetime
值转换为纪元值的一种好方法是通过从要转换的日期中减去历元时间来创建datetime.timedelta
。该功能可以应用于pandas.Series
或pandas.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
也许需要'DF [ “BaseDateTime”] dt.tz_localize (“UT C')',勾选[docs](http://pandas.pydata.org/pandas-docs/stable/timeseries.html#working-with-time-zones) – jezrael