【问题标题】:How to subtract date and time in Pandas?如何在 Pandas 中减去日期和时间?
【发布时间】:2019-10-18 16:28:17
【问题描述】:

我有来自 Pandas 的数据,它是 CSV 文件的内容:

Date                Inbound     Outbound
17/10/2019 12:35    5.49E+02    3.95E+03 
17/10/2019 12:40    2.06E+02    3.17E+03 
17/10/2019 12:45    2.06E+02    3.17E+03 
17/10/2019 12:50    2.06E+02    3.17E+03 
17/10/2019 12:55    2.06E+02    3.17E+03 
17/10/2019 13:00    2.06E+02    3.17E+03
....

我的目标是将Date 列从时间戳转换为以分钟为单位的时间段,这应该会产生如下结果:

    Date        Inbound     Outbound
    0           5.49E+02    3.95E+03 
    5           2.06E+02    3.17E+03 
    10          2.06E+02    3.17E+03 
    15          2.06E+02    3.17E+03 
    20          2.06E+02    3.17E+03 
    25          2.06E+02    3.17E+03

【问题讨论】:

标签: python pandas


【解决方案1】:

您可以使用减去第一个时间戳来计算差异,然后得到total_seconds()并转换为分钟:

df['Date'] = pd.to_datetime(df['Date'])

df['Date'] = (df.Date.sub(df.Date.iloc[0])
   .dt.total_seconds().div(60).astype(int)
)

输出:

   Date  Inbound  Outbound
0     0    549.0    3950.0
1     5    206.0    3170.0
2    10    206.0    3170.0
3    15    206.0    3170.0
4    20    206.0    3170.0
5    25    206.0    3170.0

【讨论】:

  • 实现有问题,无法运行!
  • @TimLuka - 我认为有必要先df['Date'] = pd.to_datetime(df['Date'])
【解决方案2】:
import pandas as pd

data = [
"17/10/2019 12:35",  
"17/10/2019 12:40",  
"17/10/2019 12:45", 
"17/10/2019 12:50",  
"17/10/2019 12:55",  
"17/10/2019 13:00",
    ]

columns = ["Date"]

df = pd.DataFrame(data, columns = columns)
# Because the values came in frm a CSV, they are not datetime objects. 
# Convert the column to datetime ojects
df['Date'] = pd.to_datetime(df['Date'])
subtractdate = df["Date"].iloc[0]
df["Diff"] = df["Date"].apply(lambda x: x - subtractdate)    
print(df)

编辑:

要获取分钟,请执行以下操作...

df["Diff"] = df["Date"].apply(lambda x: (x - subtractdate).seconds/60)

(x - subdate) 返回一个timedelta 对象。它没有“分钟”选项,但有几秒钟。这将以float 格式返回(即5.010.0

要将其作为字符串获取,请执行以下操作:

df["Diff"] = df["Date"].apply(lambda x: str( (x - subtractdate).seconds/60  ) ) 

并将其作为 int 获取:

df["Diff"] = df["Date"].apply(lambda x: int( (x - subtractdate).seconds/60  ) ) 

int 将是“5、10、15”格式。

【讨论】:

  • 谢谢!实际上它确实像00:00:00 00:05:00 00:10:00 ... 一样显示我只想在没有时间的情况下显示差异。 0, 5, 10, 15 ...
猜你喜欢
  • 2020-03-26
  • 2023-01-12
  • 1970-01-01
  • 2022-11-14
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多