我是python的新手。
我有一列datatime
数据。
现在我想在几秒钟内创建一个只有datetime
的时间部分的新列。
我的第一行数据是2018-08-03 10:53:00
,我希望在几秒钟内转换10:53:00
,例如39180想要存储在新列中。
我的功能是从给定的datetime
对象获得平均时间。日期可能有所不同,但我只想要平均时间。
答案 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