试图在 Panda DataFrame 中将感知本地日期时间转换为天真的本地日期时间

Posted

技术标签:

【中文标题】试图在 Panda DataFrame 中将感知本地日期时间转换为天真的本地日期时间【英文标题】:Trying to convert aware local datetime to naive local datetime in Panda DataFrame 【发布时间】:2020-11-09 13:20:09 【问题描述】:

我正在努力按照我的标题所说的那样做。我有一个带有日期时间和时区的熊猫数据框。

我正在尝试将列 startDate 转换为本地天真的日期时间,如下所示:

这是执行此操作的一段代码

df['startDate'] = df['startDate'].apply(lambda x: timezone('UTC').localize(x))
df["startDate"] = df.apply(lambda x: x.startDate.astimezone(timezone(x.timezone)), axis=1)
df["startDate"] = df["startDate"].dt.tz_localize(None)

我收到此错误消息。

Tz 感知 datetime.datetime 不能转换为 datetime64,除非 utc=真

如果我真的精确 UTC=True,我会得到我的初始日期时间值,这不是我想要实现的目标

我想从中得到

2020-07-20 20:30:00-07:00
2020-07-21 16:00:00-04:00
2020-07-20 20:30:00-07:00

到这里

2020-07-20 20:30:00
2020-07-21 16:00:00
2020-07-20 20:30:00

我正在考虑转换为字符串,并删除最后 5 个字符并重新转换为日期时间对象。不过我正在寻找更好的解决方案。

谢谢

【问题讨论】:

1.放弃应用并使用df['startDate'].tz_localize('UTC') 2. 然后使用dt.normalize()strftime 方法将您的日期格式化为字符串。 不起作用,它将我的日期时间重新转换为 UTC 时间,我想将其保留为当地时间 顺便说一句,相关:***.com/q/38531317/10197418 【参考方案1】:

如果您读取带有 UTC 偏移量的日期时间字符串,例如 "2020-07-20 20:30:00-07:00",这将为您提供 datetime.datetime 类型的系列(而不是 pandas datetime64[ns])。因此,如果我做对了,您要做的是删除tzinfo。这基本上描述为here,你可以这样做

import pandas as pd

df = pd.DataFrame('startDate':pd.to_datetime(['2020-07-20 20:30:00-07:00',
                                               '2020-07-21 16:00:00-04:00',
                                               '2020-07-20 20:30:00-07:00']))
# df['startDate'].iloc[0]
# datetime.datetime(2020, 7, 20, 20, 30, tzinfo=tzoffset(None, -25200))

df['startDate_naive'] = df['startDate'].apply(lambda t: t.replace(tzinfo=None))

# df['startDate_naive']
# 0   2020-07-20 20:30:00
# 1   2020-07-21 16:00:00
# 2   2020-07-20 20:30:00
# Name: startDate_naive, dtype: datetime64[ns]

如果您使用时区感知 pandas 日期时间列,请参阅 my answer here 了解如何删除时区感知。

【讨论】:

以上是关于试图在 Panda DataFrame 中将感知本地日期时间转换为天真的本地日期时间的主要内容,如果未能解决你的问题,请参考以下文章

在 Panda Dataframe 中附加布尔列

3-Panda之Series和DataFrame区别

利用python数据分析panda学习笔记之DataFrame

如何在 Panda MultiIndex Dataframe 中绘制 ylabel

Panda DF:在有条件的多列中查找最小值

在 Panda DataFrame 中过滤 groupby 数据的有效方法