在 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 转换时区的主要内容,如果未能解决你的问题,请参考以下文章