python - Pandas - DateTime MultiIndex - 不明确的时间、时区和频率
问题描述
我的目标是加载考虑夏季/冬季时间(夏令时)的预测文件:
足球俱乐部 | 价值 |
---|---|
25.10.2020 00:00 | 0 |
25.10.2020 00:15 | 1 |
25.10.2020 00:30 | 2 |
25.10.2020 00:45 | 3 |
25.10.2020 01:00 | 4 |
25.10.2020 01:15 | 5 |
25.10.2020 01:30 | 6 |
25.10.2020 01:45 | 7 |
2020-10-25 2A:00(仍然是夏令时/夏令时(DST)) | 8 |
2020-10-25 2A:15 | 9 |
2020-10-25 2A:30 | 10 |
2020-10-25 2A:45 | 11 |
2020-10-25 2B:00(冬令时/无夏令时) | 12 |
2020-10-25 2B:15 | 13 |
2020-10-25 2B:30 | 14 |
2020-10-25 2B:45 | 15 |
25.10.2020 03:00 | 16 |
25.10.2020 03:15 | 17 |
25.10.2020 03:30 | 18 |
25.10.2020 03:45 | 19 |
作为:
更新时间 | 足球俱乐部 | 价值 |
---|---|---|
2020-01-01 00:00:00 |
2020-10-25 00:00:00+02:00 |
0 |
2020-01-01 00:00:00 |
2020-10-25 00:15:00+02:00 |
1 |
2020-01-01 00:00:00 |
2020-10-25 00:30:00+02:00 |
2 |
2020-01-01 00:00:00 |
2020-10-25 00:45:00+02:00 |
3 |
2020-01-01 00:00:00 |
2020-10-25 01:00:00+02:00 |
4 |
2020-01-01 00:00:00 |
2020-10-25 01:15:00+02:00 |
5 |
2020-01-01 00:00:00 |
2020-10-25 01:30:00+02:00 |
6 |
2020-01-01 00:00:00 |
2020-10-25 01:45:00+02:00 |
7 |
2020-01-01 00:00:00 |
2020-10-25 02:00:00+02:00 (夏令时) |
8 |
2020-01-01 00:00:00 |
2020-10-25 02:15:00+02:00 |
9 |
2020-01-01 00:00:00 |
2020-10-25 02:30:00+02:00 |
10 |
2020-01-01 00:00:00 |
2020-10-25 02:45:00+02:00 |
11 |
2020-01-01 00:00:00 |
2020-10-25 02:00:00+01:00 (没有夏令时) |
12 |
2020-01-01 00:00:00 |
2020-10-25 02:15:00+01:00 |
13 |
2020-01-01 00:00:00 |
2020-10-25 02:30:00+01:00 |
14 |
2020-01-01 00:00:00 |
2020-10-25 02:45:00+01:00 |
15 |
2020-01-01 00:00:00 |
2020-10-25 03:00:00+01:00 |
16 |
2020-01-01 00:00:00 |
2020-10-25 03:15:00+01:00 |
17 |
2020-01-01 00:00:00 |
2020-10-25 03:30:00+01:00 |
18 |
2020-01-01 00:00:00 |
2020-10-25 03:45:00+01:00 |
19 |
我的步骤是:
df = pd.read_csv(filePath, parse_dates = ["FC"])
df['FC'] = pd.to_datetime(df['FC'].str.replace("2A", "02").str.replace("2B", "02"), errors = "raise")
df["UpdateTime"] = extractedUpdateTime # extracted from file name before
df.set_index(["UpdateTime", "FC"], inplace = True)
该结构是我想要的目标结构。剩下的唯一问题是将 FC 中的日期时间本地化为 CET,因为我注意到 2A 和 2B 都设置为冬季?
从输出
df.index.get_level_values(1).tz_localize('CET', ambiguous=True)
是
错误的价值观 |
---|
2020-10-25 01:00:00+02:00 |
2020-10-25 01:15:00+02:00 |
2020-10-25 01:30:00+02:00 |
2020-10-25 01:45:00+02:00 |
2020-10-25 02:00:00+01:00 (2A 已经是冬季 (+00:01) 而不是 DST (+00:02)) |
2020-10-25 02:15:00+01:00 |
2020-10-25 02:30:00+01:00 |
2020-10-25 02:45:00+01:00 |
2020-10-25 02:00:00+01:00 |
2020-10-25 02:15:00+01:00 |
2020-10-25 02:30:00+01:00 |
2020-10-25 02:45:00+01:00 |
2020-10-25 03:00:00+01:00 |
但我希望
正确的价值观 |
---|
2020-10-25 01:00:00+02:00 |
2020-10-25 01:15:00+02:00 |
2020-10-25 01:30:00+02:00 |
2020-10-25 01:45:00+02:00 |
2020-10-25 02:00:00+02:00 (仍然是夏令时) |
2020-10-25 02:15:00+02:00 |
2020-10-25 02:30:00+02:00 |
2020-10-25 02:45:00+02:00 |
2020-10-25 02:00:00+01:00 (没有夏令时) |
2020-10-25 02:15:00+01:00 |
2020-10-25 02:30:00+01:00 |
2020-10-25 02:45:00+01:00 |
2020-10-25 03:00:00+01:00 |
我也试过参数ambiguous = 'infer'
,但输出是一样的。
然后我看到了一个例子并测试了
pd.Series(df.index.get_level_values(1)).dt.tz_localize('CET', ambiguous='infer')
这给了我预期的正确输出。
那么为什么两个输出都是
df.index.get_level_values(1).tz_localize('CET', ambiguous='infer')
和
pd.Series(df.index.get_level_values(1)).dt.tz_localize('CET', ambiguous='infer')
不相等?
此致!
解决方案
推荐阅读
- django - 我们如何在 Django 中使用多种用户类型
- python-3.x - Python:当从包含 pandas 数据帧数据的字符串变量中获取 unicode 字符时,re.sub 会给出不同的输出
- amazon-web-services - 将一个域指向或重定向到另一个域
- reactjs - 在 Firebase onAuthStateChanged 填充状态导致再次登录页面之前重定向到私有路由
- javascript - 使用vue js显示一个循环的聊天列表卡片
- excel - 从给定网站抓取数据时出错
- function - Spark Window 功能,这是 Spark 中的错误吗?
- node.js - 在 POST API 请求有效负载中附加文件
- angular - 为什么同一模块中的组件不使用 router.navigate 加载?
- android - Android (Delphi):阐明远程推送通知和线程