【发布时间】:2018-10-29 10:48:05
【问题描述】:
嗨,我有一个以下格式的时间增量
0days 01:25:53.0000000
我想将这个时间增量更改为等值 分钟(即 85.88) 谢谢
【问题讨论】:
嗨,我有一个以下格式的时间增量
0days 01:25:53.0000000
我想将这个时间增量更改为等值 分钟(即 85.88) 谢谢
【问题讨论】:
使用 total_seconds
pd.Series(pd.Timedelta('0days 01:25:53.0000000')).dt.total_seconds()/60
Out[334]:
0 85.883333
dtype: float64
【讨论】:
# Sample DataFrame
time
0 0days 01:25:53.0000000
使用 to_timedelta 并除以 pd.Timedelta(1, 'm')
pd.to_timedelta(df.time) / pd.Timedelta(1, 'm')
0 85.883333
Name: time, dtype: float64
【讨论】:
我对您可以选择的不同方法进行了比较:
df.timedelta / np.timedelta64(1, 'm')df.timedelta.dt.total_seconds().div(60)(> 10.000 行时最快)df.timedelta.astype('timedelta64[s]').div(60)(对于
df.timedelta.astype('timedelta64[m]')(将舍入值)。注意:这个答案是骗人的: Convert timedelta64[ns] column to seconds in Python Pandas DataFrame
完整示例:
import pandas as pd
df = pd.DataFrame({
'timedelta': [pd.Timedelta('0days 01:25:53.0000000'),
pd.Timedelta('0days 02:25:53.0000000')]
})
df['timedelta-minutes'] = df.timedelta.astype('timedelta64[s]').div(60)
print(df)
返回:
timedelta timedelta-minutes
0 01:25:53 85.883333
1 02:25:53 145.883333
import pandas as pd
import numpy as np
df = pd.DataFrame({
'timedelta': [pd.Timedelta('0days 01:25:53.0000000'),
pd.Timedelta('0days 02:25:53.0000000')]
})
df = pd.concat([df]*5000)
%timeit df.timedelta / np.timedelta64(1, 'm') # 638 µs per loop
%timeit df.timedelta.dt.total_seconds().div(60) # 215 µs per loop
%timeit df.timedelta.astype('timedelta64[s]').div(60) # 213 µs per loop
%timeit df.timedelta.astype('timedelta64[m]') # 132 µs per loop
【讨论】:
pd.concat([df]*2000)