如何在Pandas中把Timedelta转换为Int(有例子)

902 阅读4分钟

你可以使用以下方法将pandas DataFrame中的timedelta列转换成整数列。

方法1:将Timedelta转换为整数(日)

df['days'] = df['timedelta_column'].dt.days

方法2:将Timedelta转换为整数(小时)

df['hours'] = df['timedelta_column'] / pd.Timedelta(hours=1)

方法3:将Timedelta转换为整数(分钟)

df['minutes'] = df['timedelta_column'] / pd.Timedelta(minutes=1)

下面的例子展示了如何在实践中用以下pandas DataFrame使用每种方法:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'promotion': ['A', 'B', 'C', 'D'],
                   'start': ['2021-10-04 13:29:00', '2021-10-07 12:30:00',
                             '2021-10-15 04:20:00', '2021-10-18 15:45:03'],
                   'end':   ['2021-10-08 11:29:06', '2021-10-15 10:30:07',
                             '2021-10-29 05:50:15', '2021-10-22 15:40:03']})

#convert start date and end date columns to datetime
df['start'] = pd.to_datetime(df['start'])
df['end'] = pd.to_datetime(df['end'])

#create new column that contains timedelta between start and end
df['duration'] = df['end'] - df['start']

#view DataFrame
print(df)

  promotion               start                 end         duration
0         A 2021-10-04 13:29:00 2021-10-08 11:29:06  3 days 22:00:06
1         B 2021-10-07 12:30:00 2021-10-15 10:30:07  7 days 22:00:07
2         C 2021-10-15 04:20:00 2021-10-29 05:50:15 14 days 01:30:15
3         D 2021-10-18 15:45:03 2021-10-22 15:40:03  3 days 23:55:00

例1:将Timedelta转换为整数(日)

下面的代码展示了如何创建一个名为days的新列,将持续时间列中的timedelta转换为一个整数值,代表timedelta列的天数:

#create new column that converts timedelta into integer number of days
df['days'] = df['duration'].dt.days

#view updated DataFrame
print(df)

  promotion               start                 end         duration  days
0         A 2021-10-04 13:29:00 2021-10-08 11:29:06  3 days 22:00:06     3
1         B 2021-10-07 12:30:00 2021-10-15 10:30:07  7 days 22:00:07     7
2         C 2021-10-15 04:20:00 2021-10-29 05:50:15 14 days 01:30:15    14
3         D 2021-10-18 15:45:03 2021-10-22 15:40:03  3 days 23:55:00     3

我们可以使用dtype 来检查这个新列的数据类型:

#check data type
df.days.dtype

dtype('int64')

新列是一个整数。

例2:将Timedelta转换为整数(小时)

下面的代码显示了如何创建一个名为hours 的新列,将持续时间列中的timedelta转换为一个数字值,代表timedelta列中的总时数:

#create new column that converts timedelta into total number of hours
df['hours'] = df['duration'] / pd.Timedelta(hours=1)

#view updated DataFrame
print(df)

  promotion               start                 end         duration      hours
0         A 2021-10-04 13:29:00 2021-10-08 11:29:06  3 days 22:00:06   94.001667  
1         B 2021-10-07 12:30:00 2021-10-15 10:30:07  7 days 22:00:07  190.001944
2         C 2021-10-15 04:20:00 2021-10-29 05:50:15 14 days 01:30:15  337.504167
3         D 2021-10-18 15:45:03 2021-10-22 15:40:03  3 days 23:55:00   95.916667

我们可以使用dtype 来检查这个新列的数据类型:

#check data type
df.hours.dtype

dtype('float64')

新列是一个浮点数。

例3:将Timedelta转换为整数(分钟)

下面的代码显示了如何创建一个名为minutes 的新列,将持续时间列中的timedelta转换为一个数字值,代表timedelta列中的总分钟数:

#create new column that converts timedelta into total number of minutes
df['minutes'] = df['duration'] / pd.Timedelta(minutes=1)

#view updated DataFrame
print(df)

  promotion               start                 end         duration        minutes
0         A 2021-10-04 13:29:00 2021-10-08 11:29:06  3 days 22:00:06    5640.100000  
1         B 2021-10-07 12:30:00 2021-10-15 10:30:07  7 days 22:00:07   11400.116667
2         C 2021-10-15 04:20:00 2021-10-29 05:50:15 14 days 01:30:15   20250.250000
3         D 2021-10-18 15:45:03 2021-10-22 15:40:03  3 days 23:55:00    5755.000000

我们可以使用dtype 来检查这个新列的数据类型:

#check data type
df.minutes.dtype

dtype('float64')

新列是一个float。

其他资源

下面的教程解释了如何在pandas中执行其他常见任务:

如何在Pandas中把列转换成DateTime
如何在Pandas中把Datetime转换成Date
如何在Pandas中从Date中提取月份