【发布时间】:2020-11-30 21:38:48
【问题描述】:
我有一个包含 2 列的 DataFrame(6M 行),一列包含本地时间(时区幼稚),另一列包含时区。像这样的:
| | SCHEDULED_DEPARTURE | ORIGIN_TZ |
|---:|:----------------------|:--------------------|
| 0 | 2020-11-30 11:40:00 | America/New_York |
| 1 | 2020-11-30 16:51:00 | America/New_York |
| 2 | 2020-11-30 09:05:00 | America/Chicago |
| 3 | 2020-11-30 19:18:00 | America/Chicago |
| 4 | 2020-11-30 10:36:00 | America/New_York |
| 5 | 2020-11-30 12:10:00 | America/Los_Angeles |
| 6 | 2020-11-30 16:05:00 | America/New_York |
| 7 | 2020-11-30 12:14:00 | America/New_York |
| 8 | 2020-11-30 16:05:00 | America/New_York |
| 9 | 2020-11-30 12:40:00 | America/Chicago |
我正在尝试使用 for 例程本地化 SCHEDULED_DEPARTURE 的每一行,该例程按每个时区对 df 进行子集化,添加时区并继续循环:
for tz in df['ORIGIN_TZ'].unique():
mask_tz = (df['ORIGIN_TZ'] == tz)
df.loc[mask_tz,'SCHEDULED_DEPARTURE'] = df.loc[mask_tz,'SCHEDULED_DEPARTURE'].dt.tz_localize(tz)
奇怪的是,有时会起作用,而有时会返回以下错误:
AttributeError:只能将 .dt 访问器与 datetimelike 值一起使用
在提取SCHEDULED_DEPARTURE列时,类型明显是datetime-like:
Name: SCHEDULED_DEPARTURE, Length: 5714008, dtype: datetime64[ns]
你知道如何解决这个问题吗?每列是否可以有超过 1 个时区?
这里是复制样本df的代码:
df = pd.DataFrame({'SCHEDULED_DEPARTURE': {0: pd.Timestamp('2020-11-30 10:15:00'), 1: pd.Timestamp('2020-11-30 07:55:00'), 2: pd.Timestamp('2020-11-30 06:00:00'), 3: pd.Timestamp('2020-11-30 16:23:00'), 4: pd.Timestamp('2020-11-30 07:35:00'), 5: pd.Timestamp('2020-11-30 08:00:00'), 6: pd.Timestamp('2020-11-30 08:50:00'), 7: pd.Timestamp('2020-11-30 13:45:00'), 8: pd.Timestamp('2020-11-30 10:15:00'), 9: pd.Timestamp('2020-11-30 20:00:00')}, 'ORIGIN_TZ': {0: 'America/New_York', 1: 'America/New_York', 2: 'America/Denver', 3: 'America/New_York', 4: 'America/Chicago', 5: 'America/Chicago', 6: 'America/Los_Angeles', 7: 'America/Chicago', 8: 'America/New_York', 9: 'America/Los_Angeles'}})
【问题讨论】: