【问题标题】:How to transform these columns in time如何及时变换这些列
【发布时间】:2021-11-10 11:21:27
【问题描述】:

我正在对具有这种格式的日期列的数据集进行一些数据探索性分析:

0       2020-02-25 00:29:00
1       2020-02-24 23:50:00
2       2020-02-25 00:31:00
3       2020-02-25 02:03:00
4       2020-02-25 03:51:00

做减法 columnc = column A -column B,我得到:

0              0 days 00:51:00
1       0 days 01:05:12.207000
2       0 days 00:50:41.817000
3              0 days 00:23:00

例如,我想在几分钟内转换此列 C,但我找不到在转换中声明天数的方法。我找到了这个主题:How to convert datetime to integer in python,但它不包括天数而且我没有相同的分隔符,是否有可能或者我必须以某种方式更改 A 列和 B 列?

一如既往地感谢,

这个社区对于进入这个话题的人来说非常有用。

【问题讨论】:

  • 什么是A、B、C列?
  • 您不能将列转换为分钟,然后减去它吗?这样你就不必处理days - 例如。通过将其全部转换为 unix 时间戳,然后减去,然后将其转换回来?
  • B 列在哪里?
  • @MrFuppes 本来可以的,我也试试。谢谢大家!

标签: python pandas datetime timedelta


【解决方案1】:

虽然我不确定你的确切日期格式(它是一个日期时间对象吗?它只是一个字符串吗?),假设它是一个字符串,最初你想将它转换为一个日期时间对象:

datetime_object = datetime.strptime('2020-02-25 00:29:00', '%Y-%m-%d %H:%M:%S')

转换后,(或者如果你已经有一个日期时间对象),你可以减去它们:

timedelta_object = datetime_object2-datetime_object1

最后,您可以将时间增量转换为分钟:

diff_minutes = timedelta_object.total_seconds()/60

编辑:就在提交之前,我刚刚看到 U12-Forward 已经在此处发布了一个包含相同信息的答案,但我会保留我的答案并包含更多细节。

【讨论】:

  • 是的,对不起。我有点新...列的类型是日期时间对象,所以它工作得很好,谢谢
【解决方案2】:

你可以使用dt.total_seconds() / 60:

>>> df.dt.total_seconds() / 60
0    51.00000
1    65.20345
2    50.69695
3    23.00000
dtype: float64
>>>

只需将总秒数除以 60 即可得到分钟数。

如果您不想要额外的小数点,请尝试:

>>> df.dt.total_seconds().astype(int) // 60
0    51
1    65
2    50
3    23
dtype: int32
>>> 

【讨论】:

  • 很好,成功了!不知道有这个total_seconds函数,谢谢!
【解决方案3】:

假设您的数据框看起来像这样(我刚刚从 Col A 中减去了 4 天)

             Column A            Column B
0 2020-02-25 00:29:00 2020-02-21 00:29:00
1 2020-02-24 23:50:00 2020-02-20 23:50:00
2 2020-02-25 00:31:00 2020-02-21 00:31:00
3 2020-02-25 02:03:00 2020-02-21 02:03:00
4 2020-02-25 03:51:00 2020-02-21 03:51:00

我们可以使用numpy 将您的时间增量作为整数。

使用np.timedelta64 并传递参数1 m 其中m = minute

import pandas as pd
import numpy as np

df['minute_delta'] = (df['Column A'] - df['Column B']) / np.timedelta64(1,'m')

             Column A            Column B  minute_delta
0 2020-02-25 00:29:00 2020-02-21 00:29:00        5760.0
1 2020-02-24 23:50:00 2020-02-20 23:50:00        5760.0
2 2020-02-25 00:31:00 2020-02-21 00:31:00        5760.0
3 2020-02-25 02:03:00 2020-02-21 02:03:00        5760.0
4 2020-02-25 03:51:00 2020-02-21 03:51:00        5760.0

【讨论】:

  • 这是另一种选择,效果也很好。也谢谢你。我记下了这个功能很有趣。
  • @Enrique you'e 欢迎 :) 您还可以更改 'm`` in the np.timedelta` 以将天数作为整数或小时、年、天等 :) 尝试更改它
  • 功能很好,对于我正在做的分析,我需要它在几分钟或几秒钟内,但我将来肯定会使用它。谢谢
  • m 更改为s,您将获得秒数;)祝您好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2010-11-18
  • 2012-01-26
相关资源
最近更新 更多