【问题标题】:Calculate time difference of a Datetime object and get output as floatvalues?计算 Datetime 对象的时间差并将输出作为浮点值?
【发布时间】:2018-01-08 03:25:44
【问题描述】:

我有一个日期和时间的数据框列:

0    2017-06-24 08:37:00
1    2017-06-24 08:40:00
2    2017-06-24 08:42:01
3    2017-06-24 08:44:01
4    2017-06-24 08:46:00
5    2017-06-24 08:48:00
6    2017-06-24 08:50:01
7    2017-06-24 08:52:01
8    2017-06-24 08:54:01
9    2017-06-24 08:56:00
10   2017-06-24 08:58:01
11   2017-06-24 09:00:01
12   2017-06-24 09:04:01
13   2017-06-24 09:06:01
Name: Datetime, dtype: datetime64[ns]

我想要两个时间戳的时间差如:

2017-06-24 08:40:00 - 2017-06-24 08:37:00 = 3.0

2017-06-24 08:42:01 - 2017-06-24 08:40:00 = 2.1

我试过这段代码:

for z in range(len(df)):
    abc = (df["Datetime"].iat[z+1] - df["Datetime"].iat[z])

我得到的输出是这样的,但有一个错误:

0 days 00:03:00
0 days 00:02:01
0 days 00:02:00
0 days 00:01:59
0 days 00:02:00
0 days 00:02:01
0 days 00:02:00
0 days 00:02:00
0 days 00:01:59
0 days 00:02:01

IndexError: index 14 is out of bounds for axis 0 with size 14

预期输出:

3.0

2.1

2.0

1.59

任何帮助将不胜感激。

【问题讨论】:

  • 我想你想要range(len(df) - 1)
  • 但我希望差异为浮动。
  • 你误会了。我相信您遇到了超出范围的错误,因为您使用其长度作为最大索引在 df 上运行 for 循环。但是df 的长度是 14,它的最大索引是 13。所以在for 循环中,您需要调整范围,如上所示。
  • 问题是你有两个问题:1)输出不是你想要的格式。 2)你得到一个超出范围的异常。对于问题 1,请参阅 Jezrael 的回答。对于问题 2,应用我给出的修复方法
  • 明白。谢谢杰克。

标签: python pandas datetime dataframe timedelta


【解决方案1】:

你需要diff - 输出是timedeltas,所以需要转换为total_seconds,如果需要以分钟为单位的输出除以60

df['diff'] = df['Datetime'].diff().dt.total_seconds().div(60)
print (df)
              Datetime      diff
0  2017-06-24 08:37:00       NaN
1  2017-06-24 08:40:00  3.000000
2  2017-06-24 08:42:01  2.016667
3  2017-06-24 08:44:01  2.000000
4  2017-06-24 08:46:00  1.983333
5  2017-06-24 08:48:00  2.000000
6  2017-06-24 08:50:01  2.016667
7  2017-06-24 08:52:01  2.000000
8  2017-06-24 08:54:01  2.000000
9  2017-06-24 08:56:00  1.983333
10 2017-06-24 08:58:01  2.016667
11 2017-06-24 09:00:01  2.000000
12 2017-06-24 09:04:01  4.000000
13 2017-06-24 09:06:01  2.000000

【讨论】:

  • 我可以对浮动对象使用相同的逻辑进行平均吗?
  • 你觉得difference 吗?然后使用df['diff'] = df['float_col'].diff()
  • 不,我想计算数据框列的平均值,但逻辑应该像你的这个解决方案。取前两个元素并计算平均值,像这样?
  • 嗯,看来你需要df['diff'] = df['float_col'].rolling(2).mean()
  • 没有数据硬答案,但似乎需要df = df.groupby(df['date'].dt.date)['date'].apply(lambda x: x.iat[0] - x.iat[-1]) 应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2019-06-28
  • 2011-10-10
  • 1970-01-01
相关资源
最近更新 更多