【问题标题】:Difference between two timestamps in PandasPandas 中两个时间戳的区别
【发布时间】:2015-10-30 10:10:26
【问题描述】:

我有以下两个时间列,“Time1”和“Time2”。我必须计算“Difference”列,即 Pandas 中的 (Time2-Time1):

Time1         Time2                 Difference
8:59:45       9:27:30               -1 days +23:27:45
9:52:29       10:08:54              -1 days +23:16:26
8:07:15       8:07:53               00:00:38

当 Time1 和 Time2 处于不同的时间时,我得到的结果为“-1 days +”。我想要的前两个值的输出如下:

Time1         Time2                 Difference
8:59:45       9:27:30               00:27:45
9:52:29       10:08:54              00:16:26

如何在 Pandas 中获得此输出?

两个时间值都在 'datetime64[ns]' dtype 中。

【问题讨论】:

  • 我没有你的问题。您能否提供一种方法来生成重现问题的数据框?另外,您是否关心差异的格式,或者字符串是否有效?
  • 我认为这是一个副本:stackoverflow.com/questions/29907529/…
  • 或者你不是只做Time1 - Time2而不是Time2 - Time1吗?否则this question 可能会有所帮助。
  • @Ian:不,我尝试了 Time2-Time1 到整个专栏。无论 Time2 和 Time1 有不同的时间,我都会得到相同的结果。您建议的参考问题没有帮助。
  • 你能发布你的代码吗?

标签: pandas datetime-format timespan


【解决方案1】:

问题不在于time1time2 在不同的时间,而是time2time1 之前所以time2-time1 是负数,这就是负时间增量的存储方式。如果您只想以分钟为单位的差为负数,则可以在计算差之前提取分钟:

(df.Time1.dt.minute- df.Time2.dt.minute)

【讨论】:

  • 这并不准确。 df.Time.dt.minute 返回 datetime.time 对象的分钟部分。例如,如果time1datetime.time(09,56,36),那么分钟的值就是56。现在,如果您要减去的另一个时间是一小时或更长时间,则减法不会返回正确的结果。例如datetime.time(8, 56, 6).minute - datetime.time(7, 56, 6).minute 返回0 分钟差,而预期结果是60
【解决方案2】:

我无法使用 pandas 17.1 重现该问题:

import pandas as pd

d = {
    "start_time": [
        "8:59:45",
        "9:52:29",
        "8:07:15"
    ],
    "end_time": [
        "9:27:30",
        "10:08:54",
        "8:07:53"
    ]
}

from datetime import  datetime
df = pd.DataFrame(data=d)
df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])

df.end_time - df.start_time

0   00:27:45
1   00:16:25
2   00:00:38
dtype: timedelta64[ns]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2018-01-18
    • 2018-12-28
    • 2020-12-10
    • 1970-01-01
    • 2011-05-17
    • 2019-11-20
    相关资源
    最近更新 更多