py_*_*oob 5 python-datetime pandas
我的数据框中有两列 - 开始日期和完成日期(它是时间戳)。我想通过找出差异来计算运行时间。当我运行下面的代码时,出现错误:TypeError: cannot subtract DatetimeArray from ndarray。我也无法将完成日期列拆分为日期和时间,以便我可以以另一种方式计算运行时间。
# calculate runtime
pd.to_datetime(df.start_date)
pd.to_datetime(df.finish_date)
diff = pd.to_datetime(df.finish_date) - pd.to_datetime(df.start_date)
Run Code Online (Sandbox Code Playgroud)
数据框如下所示: df
file_name unique_id start_date finish_date
file1 1716b94a8d8d83c8fffe4bdd14d536ae1ee9cba6bf17e6... 2020-09-03T16:18:38.929863799Z 2020-09-03T16:20:17.615093582Z
file2 87ff84ab119b798312230fceb3a8730fe74669a373650a... 2020-09-03T16:26:25.075167073Z 2020-09-04T00:04:39.702686798Z
Run Code Online (Sandbox Code Playgroud)
我怎么能够 -
假设您要计算日期之间的天数,那么这是一种解决方案:
import datetime as dt
diff = (pd.to_datetime(df.finish_date) - pd.to_datetime(df.start_date)).dt.days
Run Code Online (Sandbox Code Playgroud)
编辑
另一种选择是
Start = pd.to_datetime(df.finish_date)
End = pd.to_datetime(df.start_date)
End.subtract(Start)
Run Code Online (Sandbox Code Playgroud)
示例:这里我选择计算 df 中的日期与现在之间的差异。
metric_id device_id timestamp cpu_5min vol_max
0 device_1 2020-12-04 05:15:00 116.0 734.0
1 device_1 2020-12-04 05:30:00 213.0 325.0
2 device_1 2020-12-04 05:35:00 427.0 668.0
3 device_2 2020-12-04 05:15:00 540.0 NaN
4 device_2 2020-12-04 05:30:00 127.0 NaN
5 device_2 2020-12-04 05:35:00 654.0 NaN
Run Code Online (Sandbox Code Playgroud)
和
df['tDATE'] = pd.to_datetime(df['timestamp'])
df['DIFF1'] = (df['tDATE'] - dt.datetime.now()).dt.days #method 11
df['DIFF2'] = df['tDATE'].subtract(dt.datetime.now()) #method2
Run Code Online (Sandbox Code Playgroud)
返回
metric_id device_id timestamp cpu_5min vol_max \
0 device_1 2020-12-04 05:15:00 116.0 734.0
1 device_1 2020-12-04 05:30:00 213.0 325.0
2 device_1 2020-12-04 05:35:00 427.0 668.0
3 device_2 2020-12-04 05:15:00 540.0 NaN
4 device_2 2020-12-04 05:30:00 127.0 NaN
5 device_2 2020-12-04 05:35:00 654.0 NaN
metric_id tDATE difd DIFF1 DIFF2
0 2020-12-04 05:15:00 -14 -14 -14 days +22:13:26.627607
1 2020-12-04 05:30:00 -14 -14 -14 days +22:28:26.627607
2 2020-12-04 05:35:00 -14 -14 -14 days +22:33:26.627607
3 2020-12-04 05:15:00 -14 -14 -14 days +22:13:26.627607
4 2020-12-04 05:30:00 -14 -14 -14 days +22:28:26.627607
5 2020-12-04 05:35:00 -14 -14 -14 days +22:33:26.627607
Run Code Online (Sandbox Code Playgroud)
编辑:使用时间戳
从您下面的评论中可以看出,由于您正在使用此时间戳,所以上面的示例显然需要准备。请注意,这就是为什么在提出问题时提供足够的信息很重要(例如,您正在处理什么类型的数据)。当涉及到日期时,这一点甚至更加重要,因为有多种格式。这是您在评论中给出的日期格式的示例:
import datetime as dt
Date = '2020-09-03T16:18:38.929863799Z'
Date2 = '2020-10-03T16:18:38.929863799Z'
Run Code Online (Sandbox Code Playgroud)
你这里有的是Timestamps,所以你的第一步是将它们转换为datetime然后使用to_pydate(它曾经被调用Timestamp.to_datetime(),但现在已被弃用。
Date = pd.to_datetime(Date)
Date2 = pd.to_datetime(Date2)
DATE_1 = Date.to_pydatetime()
DATE_2 = Date2.to_pydatetime()
Run Code Online (Sandbox Code Playgroud)
之后你可以计算差异
DIFF = (pd.to_datetime(DATE_1) -pd.to_datetime(DATE_2))
Run Code Online (Sandbox Code Playgroud)
这是Timedelta('-30 days +00:00:00')
| 归档时间: |
|
| 查看次数: |
25857 次 |
| 最近记录: |