如何及时转换这些列
How to transform these columns in time
我正在对具有以下格式的日期列的数据集进行一些数据探索性分析:
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 列,但我找不到在转换中声明天数的方法。我找到了这个主题: 但它不包括天数,而且我没有相同的分隔符,是否有可能或者我必须以某种方式更改 A 列和 B 列?
一如既往的感谢,
这个社区对于正在进入主题的人非常有用。
您可以使用 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
>>>
虽然我不确定你的确切日期格式(它是一个日期时间对象吗?它只是一个字符串吗?),假设它在这里是一个字符串,最初你想将它转换为一个日期时间对象:
datetime_object = datetime.strptime('2020-02-25 00:29:00', '%Y-%m-%d %H:%M:%S')
转换后,(或者如果你已经有一个 datetime 对象),你可以减去它们:
timedelta_object = datetime_object2-datetime_object1
最后,您可以将时间增量转换为分钟:
diff_minutes = timedelta_object.total_seconds()/60
编辑:在提交之前,我刚刚看到 U12-Forward 已经发布了一个包含大部分相同信息的答案,但我会保留我的答案,因为它包含更多细节。
假设您的数据框看起来像这样(我刚刚从 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
我正在对具有以下格式的日期列的数据集进行一些数据探索性分析:
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 列,但我找不到在转换中声明天数的方法。我找到了这个主题:
一如既往的感谢,
这个社区对于正在进入主题的人非常有用。
您可以使用 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
>>>
虽然我不确定你的确切日期格式(它是一个日期时间对象吗?它只是一个字符串吗?),假设它在这里是一个字符串,最初你想将它转换为一个日期时间对象:
datetime_object = datetime.strptime('2020-02-25 00:29:00', '%Y-%m-%d %H:%M:%S')
转换后,(或者如果你已经有一个 datetime 对象),你可以减去它们:
timedelta_object = datetime_object2-datetime_object1
最后,您可以将时间增量转换为分钟:
diff_minutes = timedelta_object.total_seconds()/60
编辑:在提交之前,我刚刚看到 U12-Forward 已经发布了一个包含大部分相同信息的答案,但我会保留我的答案,因为它包含更多细节。
假设您的数据框看起来像这样(我刚刚从 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