在 Pandas 系列上使用 pytz 转换时区

Posted

技术标签:

【中文标题】在 Pandas 系列上使用 pytz 转换时区【英文标题】:Converting timezones using pytz on Pandas Series 【发布时间】:2020-01-30 17:34:39 【问题描述】:

我正在尝试转换熊猫系列的时区。我正在使用 pytz 包来执行此操作,但是我得到的值相差了几分钟。 我目前使用的代码可以在这里的答案中找到:Converting Items from Pandas Series to Date Time

其他答案建议使用localize() 函数来完成这项工作,但这在我的代码中不起作用。我尝试使用 normalize() 函数来解决此问题,但使用 pandas 系列时出现错误。

错误消息:AttributeError:“系列”对象没有属性 'tzinfo'

示例输入:

dfNY = pd.DataFrame('TimeSeries': [13:00, nan, 06:00, 'Morning', 'Afternoon', nan, nan, 01:30])

期望的输出:

dfLondon = pd.DataFrame('TimeSeries': [18:00, nan, 11:00, 'Morning', 'Afternoon', nan, nan, 06:30])

当前代码:

    import pandas as pd
    from pytz import timezone
    dfNY = pd.DataFrame('TimeSeries': [13:00, nan, 06:00, 'Morning', 'Afternoon', nan, nan, 01:30])
    tzDestination = "Europe/London"
    dtTimeSeries = pd.to_datetime(dfNY.TimeSeries, errors='coerce', format='%H:%M').dt.tz_localize(tzOrigin)
    tzChange = timezone(tzDestination)
    convertedTime = tzChange.normalize(dtTimeSeries).dt.strftime('%H:%M')
    dyNY = convertedTime.copy()
    dfNY = timeSeries.where(~convertedTime.ne('NaT'), convertedTime)

感谢您的帮助

【问题讨论】:

你能显示你正在使用的代码吗?添加错误消息而不生成它的代码并不是很有用。 Change utcoffset of a Timestamp的可能重复 【参考方案1】:

当我从the previous answer 运行代码时,它工作得很好。将您的代码与 IMCoins 进行比较,看看差异在哪里(您创建了一个单独的时间序列,而 IMCoins 将所有内容都保存在数据框中)。

其次,关于为什么时间戳少了四分钟,请看答案here。你怎么能解决这个问题?好吧,我怀疑你有 1900 年的数据,所以你可以将日期设置为 1 月 1 日之后。 1902.

【讨论】:

如果您查看上一个答案的输出 - 他也离开了 5 分钟。我发现在不同的机器上,输出不同您提供的答案的问题是它不适用于熊猫系列。我将系列中的数据本地化 dtTimeSeries 抱歉,我看不出答案有什么不同。偏移量始终关闭 4 分钟。如链接的答案(第二个链接)所示,这个偏移量没有错,这是由于 20 世纪初的时间记录方式(为什么四分钟很重要,我不知道......这就是它的完成方式,所以这里没有错误)。 1.其他问题的答案不能解决分钟问题 2。无论使用本地化方法 3,我都无法获得所需的结果。如果我尝试使用“规范化”方法,熊猫数据系列仍然会出错

以上是关于在 Pandas 系列上使用 pytz 转换时区的主要内容,如果未能解决你的问题,请参考以下文章

使用 pytz 进行日期时间时区转换

pytz:为啥在时区之间转换时需要规范化?

使用 pytz 将日期时间从一个时区转换为另一个时区

python不正确的时区转换使用pytz

使用 pytz 进行日期时间和时区转换 - 令人兴奋的行为

使用pytz的Datetime时区转换