将数据帧列从带时区的时间戳转换为时间戳类型

时间:2021-03-29 13:15:35

标签: python pandas datetime timestamp

我有一个包含 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

谢谢,

1 个答案:

答案 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