Pandas 带有时间戳的DataFrame列,需要本地化多个不同的时区(AttributeError:只能使用带有datetimelike值的.dt访问器)
我有一个数据帧(6百万行),有两列,一列包含本地时间(时区),另一列包含时区。大概是这样的:Pandas 带有时间戳的DataFrame列,需要本地化多个不同的时区(AttributeError:只能使用带有datetimelike值的.dt访问器),pandas,datetime,Pandas,Datetime,我有一个数据帧(6百万行),有两列,一列包含本地时间(时区),另一列包含时区。大概是这样的: | | SCHEDULED_DEPARTURE | ORIGIN_TZ | |---:|:----------------------|:--------------------| | 0 | 2020-11-30 11:40:00 | America/New_York | | 1 | 2020-11-30 16:51:00 | America/New_Y
| | 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 |
我试图使用afor
例程对df
的每一行进行本地化,该例程将df
按每个时区进行子集,添加时区,并保持循环:
df['ORIGIN_tz']中的tz的。唯一()
掩码_-tz=(df['ORIGIN_-tz']==tz)
df.loc[mask_-tz,'SCHEDULED_-deposition']=df.loc[mask_-tz,'SCHEDULED_-deposition'].dt.tz本地化(tz)
奇怪的是,它有时工作,有时返回以下错误:
AttributeError:只能对datetimelike值使用.dt访问器
提取
SCHEDULED_offering
列时,类型明显为datetime,如:
Name: SCHEDULED_DEPARTURE, Length: 5714008, dtype: datetime64[ns]
你知道怎么解决这个问题吗?每列是否可能有超过1个时区
下面是复制示例df的代码:
df=pd.DataFrame({'SCHEDULED_deeption':{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')、6:pd.Timestamp('2020-11-11-30:30:50:00')、08:00')('2020-11-30 13:45:00')、8:pd.时间戳('2020-11-30 10:15:00')、9:pd.时间戳('2020-11-30 20:00:00')、'OriginationúTZ':{0:'美国/纽约'、1:'美国/纽约'、2:'美国/丹佛'、3:'美国/纽约'、4:'美国/芝加哥'、6:'美国/洛杉矶'、7:'美国/芝加哥'、8:'美国/纽约'、9:'美国/洛杉矶')})
一旦您这样做:
df.loc[mask_tz,'SCHEDULED_DEPARTURE'] = df.loc[mask_tz,'SCHEDULED_DEPARTURE'].dt.tz_localize(tz)
您的列变为对象数据类型,下一次.dt
访问失败。请尝试处理副本:
s = df['SCHEDULED_DEPARTURE'].copy()
for tz in df['ORIGIN_TZ'].unique():
mask_tz = (df['ORIGIN_TZ'] == tz)
df.loc[mask_tz,'SCHEDULED_DEPARTURE'] = s.loc[mask_tz].dt.tz_localize(tz)
然后,df.loc[0,'SCHEDULED_execution']
将给出:
Timestamp('2020-11-30 10:15:00-0500', tz='America/New_York')
您的
SCHEDULED\u execution
列仍然是object
dtype。您太棒了,非常感谢