gpt4 book ai didi

python - 如何从 Python 日期时间获取可识别时区的年、月、日、小时等?

转载 作者:行者123 更新时间:2023-11-28 18:31:38 28 4
gpt4 key购买 nike

我一直在 Python 中使用 datetime 库中的日期时间,并使用 pytz 使它们具有时区意识。然后我一直将它们用作 Pandas DataFrames 中的日期,并尝试使用 Pandas 的应用函数和日期时间的“.day”、“.hour”、“.minute”等方法来创建仅包含日期、小时、或分钟。令人惊讶的是,它给出了 UTC 值。有没有办法返回本地的日、时或分?简单地添加偏移量是不够的,因为 UTC 的偏移量会随着夏令时的变化而变化。

非常感谢!

这是我正在谈论的例子:

import pandas as pd
import datetime as dt
import pytz

# Simply return the hour of a date
def get_hour(dt1):
return dt1.hour

# Create a date column to segment by month
# Create the date list
PST = pytz.timezone('US/Pacific')
start = PST.localize(dt.datetime(2016, 1, 1))
actuals_dates = [start + dt.timedelta(hours=x) for x in range(8760)]

# Outside of this context, you can get the hour
print ''
print 'Hour at the start date:'
print get_hour(start)
print ''

#add it to a pandas DataFrame as a column
shapes = pd.DataFrame()
shapes['actuals dates'] = actuals_dates

# create a column for the hour
shapes['actuals hour'] = shapes['actuals dates'].apply(get_hour)

# Print the first 24 hours
print shapes.head(24)

将返回:

Hour at the start date:
0

actuals dates actuals hour
0 2016-01-01 00:00:00-08:00 8
1 2016-01-01 01:00:00-08:00 9
2 2016-01-01 02:00:00-08:00 10
3 2016-01-01 03:00:00-08:00 11
4 2016-01-01 04:00:00-08:00 12
5 2016-01-01 05:00:00-08:00 13
6 2016-01-01 06:00:00-08:00 14
7 2016-01-01 07:00:00-08:00 15
8 2016-01-01 08:00:00-08:00 16
9 2016-01-01 09:00:00-08:00 17
10 2016-01-01 10:00:00-08:00 18
11 2016-01-01 11:00:00-08:00 19
12 2016-01-01 12:00:00-08:00 20
13 2016-01-01 13:00:00-08:00 21
14 2016-01-01 14:00:00-08:00 22
15 2016-01-01 15:00:00-08:00 23
16 2016-01-01 16:00:00-08:00 0
17 2016-01-01 17:00:00-08:00 1
18 2016-01-01 18:00:00-08:00 2
19 2016-01-01 19:00:00-08:00 3
20 2016-01-01 20:00:00-08:00 4
21 2016-01-01 21:00:00-08:00 5
22 2016-01-01 22:00:00-08:00 6
23 2016-01-01 23:00:00-08:00 7

最佳答案

使用列表理解似乎可以解决问题:

shapes['hour'] = [ts.hour for ts in shapes['actuals dates']]

shapes.head()
actuals dates actuals hour hour
0 2016-01-01 00:00:00-08:00 8 0
1 2016-01-01 01:00:00-08:00 9 1
2 2016-01-01 02:00:00-08:00 10 2
3 2016-01-01 03:00:00-08:00 11 3
4 2016-01-01 04:00:00-08:00 12 4

根据@Jeff 的提醒,您还可以使用 dt 访问器函数,例如:

>>> shapes['actuals dates'].dt.hour.head()
0 0
1 1
2 2
3 3
4 4
Name: actuals dates, dtype: int64

关于python - 如何从 Python 日期时间获取可识别时区的年、月、日、小时等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36705828/

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