【发布时间】:2019-12-19 07:15:18
【问题描述】:
我做了以下操作:
- 通过
apply(strptime)将pandas数据帧中的字符串日期时间转换为python日期时间 - 通过
.timestamp()方法将datetime转换为posix时间戳 - 如果我使用
.fromtimestamp()将 posix 恢复为datetime,我将获得不同的日期时间
我的时区相差 3 小时(我现在在 UTC+3),所以我认为这是一种时区问题。我也知道在应用中它会隐式转换为pandas.Timestamp,但我不明白这种情况下的区别。
这种奇怪行为的原因是什么,我应该怎么做才能避免它?实际上,在我的项目中,我需要将这个 pandas 时间戳与正确的 poxis 时间戳进行比较,现在它工作错了。
以下是虚拟的可重现示例:
df = pd.DataFrame(['2018-03-03 14:30:00'], columns=['c'])
df['c'] = df['c'].apply(lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))
dt = df['c'].iloc[0]
dt
>> Timestamp('2018-03-03 14:30:00')
datetime.datetime.fromtimestamp(dt.timestamp())
>> datetime.datetime(2018, 3, 3, 17, 30)
【问题讨论】:
-
如果使用日期和熊猫,建议将
np.timedelta64功能与pd.to_datetime一起使用。见pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html
标签: python pandas datetime timezone