将 datetime64[ns, UTC] pandas 列转换为 datetime

Posted

技术标签:

【中文标题】将 datetime64[ns, UTC] pandas 列转换为 datetime【英文标题】:convert datetime64[ns, UTC] pandas column to datetime 【发布时间】:2020-11-05 03:06:46 【问题描述】:

我有一个带有时间戳的数据框,它的数据类型是对象。

0    2020-07-09T04:23:50.267Z
1    2020-07-09T11:21:55.536Z
2    2020-07-09T11:23:18.015Z
3    2020-07-09T04:03:28.581Z
4    2020-07-09T04:03:33.874Z
Name: timestamp, dtype: object

我不知道上述数据框中日期时间的格式。我将 pd.to_datetime 应用于上面的列,其中数据类型更改为 datetime64[ns, UTC]

df['timestamp'] = pd.to_datetime(df.timestamp)

现在数据框看起来是这样的,

0   2020-07-09 04:23:50.267000+00:00
1   2020-07-09 11:21:55.536000+00:00
2   2020-07-09 11:23:18.015000+00:00
3   2020-07-09 04:03:28.581000+00:00
4   2020-07-09 04:03:33.874000+00:00
Name: timestamp, dtype: datetime64[ns, UTC]

我想将上面的 datetime64[ns, UTC] 格式转换为正常的日期时间。

For example,
2020-07-09 04:23:50.267000+00:00  to 2020-07-09 04:23:50

谁能解释一下这个 2020-07-09T04:23:50.267Z 表示的含义以及如何将其转换为日期时间对象?

【问题讨论】:

这将有助于***.com/questions/16628819/… 2020-07-09T04:23:50.267Z 是一个 ISO8601 日期/时间字符串。 Z 代表祖鲁时间,表示 UTC。 【参考方案1】:

to_datetime 的返回取决于 [令我困惑的] 输入类型:

list-like: DatetimeIndex
Series: Series of datetime64 dtype
scalar: Timestamp

所以下面失败了

df["Time"] = pd.to_datetime(df["StringArray"])
xm = df["Time"] < pd.to_datetime("12/29/2020  9:09:37 PM")

但以下工作正常

df["Time"] = pd.to_datetime(df["StringArray"])
xm = df["Time"] < pd.to_datetime("12/29/2020  9:09:37 PM", utc=True)

这可以帮助您避免时区问题。问候,

【讨论】:

【参考方案2】:

要删除时区,请使用tz_localize:

df['timestamp'] = pd.to_datetime(df.timestamp).dt.tz_localize(None)

输出:

                timestamp
0 2020-07-09 04:23:50.267
1 2020-07-09 11:21:55.536
2 2020-07-09 11:23:18.015
3 2020-07-09 04:03:28.581
4 2020-07-09 04:03:33.874

【讨论】:

由于输入已经引用了UTC,我建议转换为None,而不是本地化,请参阅我的答案here。

以上是关于将 datetime64[ns, UTC] pandas 列转换为 datetime的主要内容,如果未能解决你的问题,请参考以下文章

熊猫日期时间格式删除时区[重复]

JSON如何反序列化日期时间并将UTC转换为指定时区?

从 timestamp[us, tz=Etc/UTC] 转换为 timestamp[ns] 会导致时间戳越界

将具有 dtypes datetime64[ns] 和 timedelta64[ns] 的数据帧导入到 google bigquery 表

Pandas DataFrame - '不能在使用 ols/线性回归时将日期时间从 [datetime64[ns]] 输入到 [float64]'

Python numpy:无法将 datetime64[ns] 转换为 datetime64[D](与 Numba 一起使用)