【问题标题】:How to get the time duration from two date-time columns of pandas dataframe?如何从熊猫数据框的两个日期时间列中获取持续时间?
【发布时间】:2018-08-28 21:59:36
【问题描述】:

我的 pandas 数据框中有两个日期时间列;我怎样才能找到以小时为单位的差异(数字)?

  • 例如从 2018-07-30 19:03:04 至 2018-07-31 11:00:48 是 15.962 小时。 当我减去两列时,我得到 15:57:43.430000,这是不希望的。

【问题讨论】:

  • 请发布可重现的代码/数据。

标签: pandas datetime dataframe


【解决方案1】:

timedelta 中取出几秒钟,然后将其除以60*60。 除以 60 Seconds -> 1 Minute60 Minutes -> 1 Hour 所以输出将以小时数为单位。

代码:

t1 = pd.to_datetime('2018-07-30 19:03:04')
t2 = pd.to_datetime('2018-07-31 11:00:48')
(t2-t1).seconds/(60*60)
15.962222222222222

当您减去它们时,您将获得 timedelta 表示的默认视图,其中首先显示天,然后显示小时,然后是分钟、秒和微秒。那就是你得到的15:57:44 值。

t2-t1
Timedelta('0 days 15:57:44')

15:57:44 的值被四舍五入,因为 t1 和 t2 在问题中没有微秒。

要在series 上使用此概念,您需要使用apply 方法,如下所示。 DateTime 列已生成并打乱。

代码:

dates = pd.date_range('2018-08-23 02:34:54','2018-08-24 00:00:00',periods=22).values
np.random.shuffle(dates)
df = pd.DataFrame(dates.reshape(11,2),columns=['t1','t2'])
df
                               t1                              t2
0   2018-08-23 21:57:36.571428608   2018-08-23 08:42:04.285714176
1   2018-08-23 07:40:52.571428608   2018-08-23 22:58:48.285714176
2   2018-08-23 16:51:38.000000000   2018-08-23 11:45:39.428571392
3   2018-08-24 00:00:00.000000000   2018-08-23 04:37:17.428571392
4   2018-08-23 10:44:27.714285824   2018-08-23 12:46:51.142857216
5   2018-08-23 06:39:40.857142784   2018-08-23 13:48:02.857142784
6   2018-08-23 15:50:26.285714176   2018-08-23 03:36:05.714285824
7   2018-08-23 02:34:54.000000000   2018-08-23 09:43:16.000000000
8   2018-08-23 05:38:29.142857216   2018-08-23 18:54:01.428571392
9   2018-08-23 14:49:14.571428608   2018-08-23 19:55:13.142857216
10  2018-08-23 20:56:24.857142784   2018-08-23 17:52:49.714285824

(df['t1']-df['t2']).apply(lambda x: x.seconds/(60*60))
0     13.258889
1      8.701111
2      5.099444
3     19.378333
4     21.960000
5     16.860556
6     12.238889
7     16.860556
8     10.740833
9     18.900278
10     3.059722
dtype: float64

更新: 比上面更快的方法:

(df['t1']-df['t2'])/np.timedelta64(1,'h')

【讨论】:

  • 谢谢,但它给出了这个错误: AttributeError: 'Series' object has no attribute 'seconds' when I apply it on my dataframe column.
  • @P.J 请检查更新的解决方案以应用于系列。让我知道这是否适合您。
  • 工作。感谢您的帮助。
猜你喜欢
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 2020-02-02
相关资源
最近更新 更多