【发布时间】:2021-07-29 08:59:43
【问题描述】:
我有一个 Pandas 数据框,其中一列是字符串日期格式,如下所示
0 time
1 September 20 2016
2 September 20 2016
3 September 19 2016
4 September 16 2016
将时间替换为纪元 unix 秒的简洁方法是什么?
【问题讨论】:
我有一个 Pandas 数据框,其中一列是字符串日期格式,如下所示
0 time
1 September 20 2016
2 September 20 2016
3 September 19 2016
4 September 16 2016
将时间替换为纪元 unix 秒的简洁方法是什么?
【问题讨论】:
您可以使用 Series 的 apply 方法修改列的值,方法是为其提供一个函数,其中包含您要对 每个 值执行的操作。
为了处理日期时间,您可以使用dateutil.parser.parse 将任意字符串解析为日期时间对象。
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)
return d.timestamp()
df[0].apply(dt2epoch) # apples given function to each value of column
结果:
0 1474329600
1 1474329600
2 1474243200
3 1473984000
Name: 0, dtype: float64
【讨论】:
你可以试试to_datetime。
import pandas as pd
your_df['time']=pd.to_datetime(your_df['time'])
编辑: 要从 datetime 对象获取纪元,您可以将系列转换为 int64 对象,这将为您提供自纪元以来的纳秒数,然后除以 10^9(一秒内的纳秒数)。
import numpy as np
your_df['time'] = (pd.to_datetime(your_df['time']).astype(np.int64)/10**9).astype(np.int64)
如果您想将其转换为整数,则需要最后一次转换(除法将为您提供浮点数)
注意:如果您的时间序列中有 NaT 对象,它们将显示为整数值 -9223372036,您可能希望预先过滤掉它们,或者将它们输出为 NaN(在这种情况下, 结果系列必须是浮点类型而不是 int)。
【讨论】: