如何将 Series 对象传递给 time.mktime?

How to pass a Series object to time.mktime?

我的数据框中的一列是 dtype datetime64,格式为 - 2011-01-01 00:00:00

'%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 col 的 utc 时间戳?

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