使用 python pandas 将 hh:mm:ss 转换为分钟

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17951820/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 21:02:35  来源:igfitidea点击:

Convert hh:mm:ss to minutes using python pandas

pythonpandas

提问by richie

I have a dataframe column, data['time taken'];

我有一个数据框列,data['time taken']

02:08:00
02:05:00
02:55:00
03:42:00
01:12:00
01:46:00
03:22:00
03:36:00

How do I get the output in the form of minutes like below?

如何以分钟的形式获得输出,如下所示?

128
125
175
222
72
106
202
216

采纳答案by waitingkuo

You could try to convert it to DatetimeIndex

您可以尝试将其转换为 DatetimeIndex

In [58]: time = pd.DatetimeIndex(df['time taken'])

In [59]: time.hour * 60 + time.minute
Out[59]: array([128, 125, 175, 222,  72, 106, 202, 216], dtype=int32)

回答by Andy Hayden

Assuming this is a string column you can use the str.splitmethod:

假设这是一个字符串列,您可以使用该str.split方法:

In [11]: df['time taken'].str.split(':')
Out[11]:
0    [02, 08, 00]
1    [02, 05, 00]
2    [02, 55, 00]
3    [03, 42, 00]
4    [01, 12, 00]
5    [01, 46, 00]
6    [03, 22, 00]
7    [03, 36, 00]
Name: time taken, dtype: object

And then use apply:

然后使用apply

In [12]: df['time taken'].str.split(':').apply(lambda x: int(x[0]) * 60 + int(x[1]))
Out[12]:
0    128
1    125
2    175
3    222
4     72
5    106
6    202
7    216
Name: time taken, dtype: int64

回答by Jeff

A bit hacky as we don't directly support reading in timedeltas ATM

有点麻烦,因为我们不直接支持在 timedeltas ATM 中读取

In [9]: df = read_csv(StringIO(data),header=None)

In [10]: df
Out[10]: 
          0
0  02:08:00
1  02:05:00
2  02:55:00
3  03:42:00
4  01:12:00
5  01:46:00
6  03:22:00
7  03:36:00
Name: time, dtype: datetime64[ns]

In [13]: df['time'] = pd.to_datetime(df['time'])

In [18]: df['delta'] = df['time']-Timestamp('today')

In [19]: df
Out[19]: 
                 time    delta
0 2013-07-30 02:08:00 02:08:00
1 2013-07-30 02:05:00 02:05:00
2 2013-07-30 02:55:00 02:55:00
3 2013-07-30 03:42:00 03:42:00
4 2013-07-30 01:12:00 01:12:00
5 2013-07-30 01:46:00 01:46:00
6 2013-07-30 03:22:00 03:22:00
7 2013-07-30 03:36:00 03:36:00

In [20]: df.dtypes
Out[20]: 
time      datetime64[ns]
delta    timedelta64[ns]
dtype: object

In [22]: df['delta'].apply(lambda x: x/np.timedelta64(1,'m'))
Out[22]: 
0    128
1    125
2    175
3    222
4     72
5    106
6    202
7    216
Name: delta, dtype: float64