我正在查看苹果手表上的健康数据。这些存储在带有UTC时间戳和我正在查看的数量值的数据帧中:
startDate endDate value
213281 2019-07-24 04:34:13 2019-07-24 04:34:13 82.139
213282 2019-07-24 04:32:56 2019-07-24 04:32:56 75.000
213283 2019-07-24 04:37:40 2019-07-24 04:37:40 99.000
在上面的中,startDate
和endDate
是UTC时间戳,我可以使用自己居住的时区(例如,在this之后)轻松地转换为本地时间戳(例如,紧随Common application properties之后)。区分夜晚与白天。
我的问题是这些数据涵盖了我在美国的一段时间,这就是我开始遇到问题的地方。
我已经尝试了几件事,但是主要的问题似乎是熊猫无法处理具有非恒定时区的日期时间列。
作为示例,在我的代码中,我在几天中有此循环:
for i, date in enumerate(df['startDate'].dt.date.unique())
但我收到此错误:
ValueError Traceback (most recent call last)
~/anaconda3/envs/testenv/lib/python3.7/site-packages/pandas/core/tools/datetimes.py in _convert_listlike(arg, box, format, name, tz)
376 try:
--> 377 values, tz = conversion.datetime_to_datetime64(arg)
378 return DatetimeIndex._simple_new(values, name=name, tz=tz)
pandas/_libs/tslibs/conversion.pyx in pandas._libs.tslibs.conversion.datetime_to_datetime64()
ValueError: Array must be all same time zone
或者,如果我想基于datetime
值选择特定的夜晚,事实证明我必须明确提及时区:
df_tmp = df[ (df.startDate >= datetime.datetime(2019,7,24,23,tzinfo=pytz.timezone('Europe/Zurich'))) & (df.startDate <= datetime.datetime(2019,7,25,7,tzinfo=pytz.timezone('Europe/Zurich'))) ]
否则我会收到此错误:
TypeError: can't compare offset-naive and offset-aware datetimes
所以,我想知道是否有一种方法可以引用本地日期时间而不会造成任何进一步的麻烦?
例如我希望能够编写如下内容:
df['localDate'] >= datetime.datetime(2019,7,24,23)
并指的是我在2019年7月24日所在的本地日期的晚上11点,而不必明确告知。
当您不必担心时区问题时,是否可以使它无缝地工作呢?我可以将本地日期时间(如上所述)获取为“时区未使用”吗?