python-3.x - 从不同时区的两个日期计算持续时间
问题描述
我有一个包含行程数据的 CSV 文件:
Trip ID,Depart Time,Arrive Time,Depart Timezone,Arrive Timezone
1,08/29/21 09:00 PM,08/29/21 09:45 PM,GMT-04:00,GMT-04:00
2,08/29/21 10:00 PM,08/30/21 01:28 AM,GMT-04:00,GMT-04:00
3,08/30/21 01:29 AM,08/30/21 01:30 AM,GMT-04:00,GMT-04:00
4,08/30/21 01:45 AM,08/30/21 03:06 AM,GMT-04:00,GMT-04:00
5,08/30/21 03:08 AM,08/30/21 03:58 AM,GMT-04:00,GMT-04:00
6,08/30/21 03:59 AM,08/30/21 04:15 AM,GMT-04:00,GMT-04:00
我可以将此文件读入数据框:
trips = pd.read_csv("trips.csv", sep=',')
我想要完成的是添加一列“持续时间”,它以分钟为单位提供旅行持续时间。行程持续时间必须计算为行程到达时间和行程出发时间之间的差值。在上表中,“出发时间”是相对于“出发时区”的。同样,“到达时间”相对于“到达时区”。请注意,在上面的示例中,到达和离开日期以及到达和离开时区恰好是相同的,但这通常不适用于我的数据。
解决方案
您拥有的是 UTC 偏移量(GMT-04:00 比 UTC 晚四个小时);您可以通过 ' ' 加入日期/时间列和相应的偏移量列并解析to_datetime。然后,您可以从生成的 tz 感知日期时间列计算持续时间 (timedelta)。前任:
# make datetime columns:
df['dt_depart'] = pd.to_datetime(df['Depart Time'] + ' ' + df['Depart Timezone'],
utc=True)
df['dt_arrive'] = pd.to_datetime(df['Arrive Time'] + ' ' + df['Arrive Timezone'],
utc=True)
注意:我在UTC=True
这里使用以防输入中存在混合的 UTC 偏移量。这给了例如
df['dt_depart']
Out[6]:
0 2021-08-29 17:00:00+00:00
1 2021-08-29 18:00:00+00:00
2 2021-08-29 21:29:00+00:00
3 2021-08-29 21:45:00+00:00
4 2021-08-29 23:08:00+00:00
5 2021-08-29 23:59:00+00:00
Name: dt_depart, dtype: datetime64[ns, UTC]
然后
# calculate the travel duration (timedelta column):
df['traveltime'] = df['dt_arrive'] - df['dt_depart']
给出例如
df['traveltime']
Out[7]:
0 0 days 00:45:00
1 0 days 03:28:00
2 0 days 00:01:00
3 0 days 01:21:00
4 0 days 00:50:00
5 0 days 00:16:00
Name: traveltime, dtype: timedelta64[ns]
推荐阅读
- javascript - 在 D3 中转换 SVG 行时,会立即出现新行
- javascript - 未在新创建的 div 中复制的数据仅被复制的名称
- java - 静态变量永远不会更新
- spring - 本地化 Spring 麻烦隐藏的地方
- list - 在 List 中创建 List 的第一个元素 - Flutter、Dart
- docker - Selenium.WebDriverException:消息:未知错误:net::ERR_NAME_NOT_RESOLVED
- r - 在R中通过不同的row.names合并两个data.frames
- r - 逐个元素与 NA 和 NULL 比较列表
- typescript - 如何在 got.post() 重写返回方法(使用 jest mock),所以我可以调用 json 方法
- zapier - Zapier:如何确保我只为轮询触发器返回一次项目