gpt4 book ai didi

python - Pandas:Series.dt 的意外行为

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:54 26 4
gpt4 key购买 nike

为什么在将格式化程序应用于系列时,通过 Series.dt 访问的系列日期时间属性的更改不会显示,此时它全部恢复为 utc?

考虑以下代码示例(其目的是显示英国夏令时的时间序列):

import pandas as pd
import logging
import pytz
from pytz import timezone

date_format_string = "%a %b %d %Y %H:%M"

def convert_datetime(x) :
return x.strftime(date_format_string)

def longer_convert(x, tz = timezone('Europe/London')) :
return convert_datetime(pytz.utc.localize(x).astimezone(tz))


if __name__=="__main__" :
rng = pd.date_range('6/6/2011', periods=6, freq='H')
rng2 = pd.date_range('6/6/2011', periods=6, freq='D')

series = pd.Series(data=rng, index=rng2)
series.name = "Original"

converted_series = series.dt.tz_localize('UTC').dt.tz_convert('Europe/London')
converted_series.name = "Converted"

formatted_series = converted_series.apply(convert_datetime)
formatted_series.name = "Formatted"

longer_converted = series.apply(longer_convert)
longer_converted.name = "Using pytz"

df=pd.concat([series,converted_series,formatted_series, longer_converted], axis=1)
print df

输出:

enter image description here

尽管使用 dt.localise 的“Converted”系列可以正确打印,但在 Formatted 中应用字符串格式运算符会导致时间恢复为 UTC 时间。我希望它的行为类似于“使用 pytz”列,并将列格式输出为其新时区的本地时间。这是一个错误还是有某种原因导致这种奇怪现象?

更奇怪的是:

dt = df.iloc[3].get_value("Converted")
print dt
print convert_datetime(dt)

正确打印 04:00+1:00 和 04:00 那么为什么应用的行为不同或者这只是一个错误?

最佳答案

事实证明,这是 pandas 18.0 以来的一个已知错误,该错误将剥离通过 series.dt.localize 应用的时区属性

一个可行的解决方案是这样做

converted_series.dt.strftime(date_format_string) 

而不是使用 apply,因为 strftime 可以正确识别日期时间属性。

关于python - Pandas:Series.dt 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36406372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com