将datetime列更改为整数而不循环

时间:2018-04-14 02:00:49

标签: python pandas

我有一个像这样的pandas数据集:

user_id      datetime
   1        13 days 21:50:00
   2        0 days 02:05:00
   5        10 days 00:10:00
   7        2 days 01:20:00
   1        3 days 11:50:00
   2        1 days 02:30:00

我想要一个包含minues的列,所以在这种情况下结果可以是:

 user_id      datetime             minutes         
   1        13 days 21:50:00        20030
   2        0 days 02:05:00          125
   5        10 days 00:10:00        14402
   7        2 days 01:20:00          2960
   1        3 days 11:50:00          5030
   2        1 days 02:30:00          1590

没有循环有没有办法做到这一点?

2 个答案:

答案 0 :(得分:10)

是的,日期/时间序列有一个特殊的dt accessor

df['minutes'] = df['datetime'].dt.total_seconds() / 60

如果您只需要整分钟,请使用.astype(int)投射结果。

答案 1 :(得分:2)

这是pd.Timedelta的一种方式:

df['minutes'] = pd.to_timedelta(df.datetime) / pd.Timedelta(1, 'm')

>>> df
   user_id          datetime  minutes
0        1  13 days 21:50:00  20030.0
1        2   0 days 02:05:00    125.0
2        5  10 days 00:10:00  14410.0
3        7   2 days 01:20:00   2960.0
4        1   3 days 11:50:00   5030.0
5        2   1 days 02:30:00   1590.0

如果您的datetime列已经是dtype timedelta,则可以省略显式转换,只需使用:

df['minutes'] = df.datetime / pd.Timedelta(1, 'm')