【发布时间】:2020-07-01 03:52:37
【问题描述】:
我在 pandas 数据框中存储没有时区信息的日期时间对象。 获取时间戳信息时,与从原始日期时间对象获取的时间戳不同。
import pandas as pd
from datetime import datetime
dt = datetime.now()
print(dt)
print(dt.timestamp())
df = pd.DataFrame(data=[(dt)],columns=["date"])
print(df)
epoche_from_pandas = df.date.apply(lambda x: x.timestamp()).values[0]
print(epoche_from_pandas)
打印 pandas 数据框会显示相同的日期时间字符串,但纪元值不同。两个时间戳都移动了 3600 秒,这相当于我的本地时区差异(+1 小时)。
2020-03-20 01:05:05.457290
1584662705.45729
2020-03-20 01:05:05.457290
1584666305.45729
我的假设是 pandas 使用它自己的内部表示,它忽略了纪元值(可能使用年、月、日、小时......组件创建)并以 unix 时间打印(未本地化)。这意味着虽然两个打印语句产生相同的字符串,但 pandas 时间实际上提前了 1 小时,因为它反映了通常滞后 1 小时的 unix。
上面说的对吗?
【问题讨论】:
-
你能提供一个minimal reproducible example吗?顺便说一句,为什么
.values[0]? -
当然,我添加了导入。我使用 .values[0] 从数据框中提取原始值(它只包含一个值,因此是第 0 个索引。
-
从(我相信)Pandas 1.0 开始,从 Series 或 DataFrame 获取 NumPy 数组的推荐方法是使用
.to_numpy(),而不是.values。无论如何,这里你甚至不需要.values,你可以直接索引Series。
标签: python pandas datetime epoch