在 Python 中处理日期和时间
Max Shron
Data Scientist & Author
rides['Duration'].dt.total_seconds().min()
-3346.0
rides['Start date'].head(3)
0 2017-10-01 15:23:25
1 2017-10-01 15:42:57
2 2017-10-02 06:37:10
Name: Start date, dtype: datetime64[ns]
rides['Start date'].head(3)\
.dt.tz_localize('America/New_York')
0 2017-10-01 15:23:25-04:00
1 2017-10-01 15:42:57-04:00
2 2017-10-02 06:37:10-04:00
Name: Start date, dtype: datetime64[ns, America/New_York]
# 尝试设置时区...
rides['Start date'] = rides['Start date']\
.dt.tz_localize('America/New_York')
pytz.exceptions.AmbiguousTimeError: Cannot infer dst time from '2017-11-05 01:56:50',
try using the 'ambiguous' argument
# 处理不明确的日期时间
rides['Start date'] = rides['Start date']\
.dt.tz_localize('America/New_York', ambiguous='NaT')
rides['End date'] = rides['End date']\
.dt.tz_localize('America/New_York', ambiguous='NaT')
# 重新计算时长,忽略错误行 rides['Duration'] = rides['End date'] - rides['Start date']# 再次查找最小值 rides['Duration'].dt.total_seconds().min()
116.0
# 查看有问题的行
rides.iloc[129]
Duration NaT
Start date NaT
End date NaT
Start station 6th & H St NE
End station 3rd & M St NE
Bike number W20529
Member type Member
Name: 129, dtype: object
# 前三行的年份
rides['Start date']\
.head(3)\
.dt.year
0 2017
1 2017
2 2017
Name: Start date, dtype: int64
# 查看前三次骑行的星期
rides['Start date']\
.head(3)\
.dt.day_name()
0 Sunday
1 Sunday
2 Monday
Name: Start date, dtype: object
# 索引前移一位,用 NaT 填充
rides['End date'].shift(1).head(3)
0 NaT
1 2017-10-01 15:26:26-04:00
2 2017-10-01 17:49:59-04:00
Name: End date, dtype: datetime64[ns, America/New_York]
在 Python 中处理日期和时间