转换时间部分从DateTime以秒为单位

时间:2018-03-09 05:17:58

标签: python python-3.x pandas

我是python的新手。 我有一列datatime数据。 现在我想在几秒钟内创建一个只有datetime的时间部分的新列。

我的第一行数据是2018-08-03 10:53:00,我希望在几秒钟内转换10:53:00,例如39180想要存储在新列中。

我的功能是从给定的datetime对象获得平均时间。日期可能有所不同,但我只想要平均时间。

2 个答案:

答案 0 :(得分:1)

您可以使用:

df = pd.DataFrame({
    'date': ['2018-08-03 10:53:00','2018-08-03 10:55:00'],
    'b': [10, 11]
})

#if necessary convert to datetime
df['date'] = pd.to_datetime(df['date'])
df['new'] = df['date'].dt.hour * 3600 + df['date'].dt.minute * 60 + df['date'].dt.second
print (df)
    b                date    new
0  10 2018-08-03 10:53:00  39180
1  11 2018-08-03 10:55:00  39300

mean = df['new'].mean()
print (mean)
39240.0

编辑:如果想要直接意味着时间:

df['new'] = df['date'].dt.time
print (df)
    b                date       new
0  10 2018-08-03 10:53:00  10:53:00
1  11 2018-08-03 10:55:00  10:55:00

mean = df['new'].mean()
print (mean)
  

TypeError:+:'datetime.time'和'datetime.time'

不支持的操作数类型

但是可以使用日期时间 - 在ns中转换为unix时间:

df['new'] = df['date'].values.astype(np.int64)
print (df)
    b                date                  new
0  10 2018-08-03 10:53:00  1533293580000000000
1  11 2018-08-03 10:55:00  1533293700000000000

mean = df['new'].mean()
print (mean)
1.53329364e+18

答案 1 :(得分:0)

以下是您要执行的操作的示例

randdays = np.random.randint(1,100,10)
randhours = np.random.randint(1,100,10)
randdates = [datetime.now() + timedelta(days=int(i),hours=int(j)) for i,j in zip(randdays,randhours)]
sample_df = pd.DataFrame({'random_dates':randdates})
sample_df['seconds'] = sample_df.random_dates.apply(lambda x: (x-datetime(day=x.day,month=x.month,year=x.year)).seconds)
sample_df

输出

    random_dates                seconds
0   2018-03-13 06:02:52.730957  21772
1   2018-06-17 10:02:52.730957  36172
2   2018-06-12 07:02:52.730957  25372
3   2018-05-09 05:02:52.730957  18172
4   2018-05-23 15:02:52.730957  54172
5   2018-03-29 21:02:52.730957  75772
6   2018-03-17 03:02:52.730957  10972
7   2018-05-16 07:02:52.730957  25372
8   2018-06-11 23:02:52.730957  82972
9   2018-03-10 14:02:52.730957  50572