gpt4 book ai didi

python - 为 Pandas 数据框中的时间戳数据设置时区

转载 作者:行者123 更新时间:2023-11-28 16:23:35 26 4
gpt4 key购买 nike

我有一个经常变化的 pandas 数据框,看起来像这样:

         date name  time       timezone
0 2016-08-01 aaa 0900 Asia/Tokyo
1 2016-08-04 bbb 1200 Europe/Berlin
2 2016-08-05 ccc 1400 Europe/London

日期、时间和时区是指交货日期,通常是海外地点,名称是客户公司的名称。

计划是获取此数据并创建一个 datetime_local 列,该列包含数据帧的 timezone 列中显示的时区。然后我想添加一个包含该日期和时间的列 datetime_london,但以伦敦的时间和日期表示。

我已经完成了大部分工作,但是在调用 tz_localize 时,我得到了一个 ValueError: The truth value of a Series is ambiguous。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all(),这表明我没有正确处理时区列。

关于如何进行有什么建议吗?

mydf = pd.DataFrame(data={'date':['2016-08-01','2016-08-04','2016-08-05'],
'time':['0900','1200','1400'],
'timezone':['Asia/Tokyo','Europe/Berlin','Europe/London'],
'name':['aaa','bbb','ccc']}
)
print(mydf)
mydf["datetime"] = mydf["date"].map(str) + " " + mydf["time"]
mydf.datetime = pd.to_datetime(mydf.datetime)
mydf.index = mydf.datetime
print(mydf)
mydf["datetime_local"] = mydf.datetime
mydf.datetime_local.tz_localize(mydf.timezone)

最佳答案

虽然前面的答案完美无缺,但在面对处理大数据的问题时,apply 方法效率有点低(对于 10^6 数量级的行)。应用方法逐行处理需要我 10-15 分钟来处理该比例。如果与数据框中的行数相比,时区列的唯一值比例非常小,则此代码效率更高:

for tz in df['timezone'].unique():    #iterates over each unique value of timezone in the dataframe
mask = df['timezone'] == tz #selects all rows with current unique tz value
df.loc[mask,'datetime_local'] = pd.DatetimeIndex(df.loc[mask, 'datetime']).tz_localize('UTC').tz_convert(tz)

最后一行代码将 datetime 转换为列到 DatetimeIndex ,这使得 datetime UTC 和 tz-naive (如果还没有的话)。因此,tz_localize('UTC')是必需的,因为 tz_convert不适用于 tz-naive日期时间。

我知道这是一个老问题,但我真的需要一个更快的解决方案,我认为我的回答可能会对追随我的人有所帮助。

关于python - 为 Pandas 数据框中的时间戳数据设置时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38399927/

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