numpy 从Pandas时间戳中提取Hour:Time值并以该格式进行打印

pu82cl6c  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(111)

我试图从时间戳元组的数组中创建的概率密度函数。我不关心时间戳的日期方面,我只想使用时间戳的小时和分钟字段。如果需要,我不介意切换到R或Julia,因为Python中的数据类型似乎限制了这一点。我试着把所有的日期都设为00:00,但没有成功。最后,我想要第一个元组值的pdf,然后是每个元组第二个和第一个值之间的差异的pdf。有没有人能给我指点迷津或给出解决办法?
Snapshot of array

xzv2uavs

xzv2uavs1#

如果我正确理解了您的问题,您正在寻找的是time结构,而不是datetime
考虑pandas,您可以使用dt.time修改或创建新列。
可重现的例子:

import pandas as pd
df = pd.DataFrame({'foo': pd.date_range("2018-01-01", periods=5, freq="H")})

df.assign(bar = df['foo'].dt.time)
print(df)
dtcbnfnu

dtcbnfnu2#

import pandas as pd
import array
from pandas import Timestamp
from datetime import datetime as dt

test = ([[Timestamp('2010-01-01 11:30:00'), Timestamp('2010-01-01 13:30:00')], 
[Timestamp('2010-01-02 11:30:00'), Timestamp('2010-01-02 12:10:00')], 
[Timestamp('2010-01-05 16:40:00'), Timestamp('2010-01-05 18:10:00')],
[Timestamp('2010-12-30 14:30:00'), Timestamp('2010-12-30 15:20:00')], 
[Timestamp('2010-12-31 01:40:00'), Timestamp('2010-12-31 02:40:00')], 
[Timestamp('2010-12-31 14:40:00'), Timestamp('2010-12-31 15:40:00')]]) 

# assuming the date is always the same just subtract the two dates

pd.Series([ v2 - v1 for v1, v2 in test])
0   0 days 02:00:00
1   0 days 00:40:00
2   0 days 01:30:00
3   0 days 00:50:00
4   0 days 01:00:00
5   0 days 01:00:00
dtype: timedelta64[ns]

# if we only care about the time difference and wish to ignore date then set date to common value 1900-01-01

v1 = pd.Series([ dt.strptime('1900-01-01 ' + str(pd.Timestamp.time(v1)), '%Y-%m-%d %H:%M:%S') for v1, v2 in test])
v2 = pd.Series([ dt.strptime('1900-01-01 ' + str(pd.Timestamp.time(v2)), '%Y-%m-%d %H:%M:%S') for v1, v2 in test])

# now subtract first timestamp in tuple from first to find elapsed time

v2 - v1
0   0 days 02:00:00
1   0 days 00:40:00
2   0 days 01:30:00
3   0 days 00:50:00
4   0 days 01:00:00
5   0 days 01:00:00
dtype: timedelta64[ns]

使用您提供的样本数据,无论您是否使用通用基线日期,结果都是相同的

相关问题