我有一个包含 3 列的数据框。数据框是从 Postgres 表创建的。
请问如何将timestamptz转换为timestamp?
我做到了
df['StartTime'] = df["StartTime"].apply(lambda x: x.tz_localize(None))
StartTime 中的数据示例:
2013-09-27 14:19:46.825000+02:00
2014-02-07 10:52:25.392000+01:00
谢谢,
答案 0 :(得分:0)
为了给出更彻底的答案,这里的要点是在您的示例中,您的时间戳具有混合的 UTC 偏移量。如果没有设置任何关键字,pandas
会将字符串转换为日期时间,但将系列的类型保留为原生 Python 日期时间,而不是 pandas
(numpy) datetime64。这使得使用像 tz_localize
这样的内置方法有点困难。但是你可以按照自己的方式工作。例如:
import pandas as pd
# exemplary Series
StartTime = pd.Series(["2013-09-27 14:19:46.825000+02:00", "2014-02-07 10:52:25.392000+01:00"])
# make sure we have datetime Series
StartTime = pd.to_datetime(StartTime)
# notice the dtype:
print(type(StartTime.iloc[0]))
# <class 'datetime.datetime'>
# we also cannot use dt accessor:
# print(StartTime.dt.date)
# >>> AttributeError: Can only use .dt accessor with datetimelike values
# ...but we can use replace method of datetime object and remove tz info:
StartTime = StartTime.apply(lambda t: t.replace(tzinfo=None))
# now we have
StartTime
0 2013-09-27 14:19:46.825
1 2014-02-07 10:52:25.392
dtype: datetime64[ns]
# and can use e.g.
StartTime.dt.date
# 0 2013-09-27
# 1 2014-02-07
# dtype: object