如何将时间范围(19:00-20:00)转换为时间戳/日期时间对象?

时间:2019-08-04 09:50:14

标签: python pandas datetime machine-learning

我的DF的列时间为1小时。 19:00-20:00、20:00-21:00、21:00-22:00等。这些时间我还有另一列记录的值,例如50,40,10。

我想知道最高值在一天的哪个小时等。 有没有一种方法可以将时间从范围转换为仅19:00这样的单个值,然后提取小时?

Df['Time'] = pd.to_datetime(Df['Time']) I tried this but got error 

Out of bounds nanosecond timestamp: 1-01-01 19:00:00

1 个答案:

答案 0 :(得分:1)

首先使用Series.str.split,然后通过to_timedelta将值转换为时间增量:

df = pd.DataFrame({'Time':['19:00-20:00', '20:00-21:00', '21:00-22:00']})

df[['first', 'second']] = (df['Time'].str.split('-', expand=True)
                                     .add(':00')
                                     .apply(pd.to_timedelta))
print (df)
          Time    first   second
0  19:00-20:00 19:00:00 20:00:00
1  20:00-21:00 20:00:00 21:00:00
2  21:00-22:00 21:00:00 22:00:00

print (df.dtypes)
Time               object
first     timedelta64[ns]
second    timedelta64[ns]
dtype: object

或者到to_datetime截止日期:

df[['first', 'second']] = df['Time'].str.split('-', expand=True).apply(pd.to_datetime)
print (df)
          Time               first              second
0  19:00-20:00 2019-08-04 19:00:00 2019-08-04 20:00:00
1  20:00-21:00 2019-08-04 20:00:00 2019-08-04 21:00:00
2  21:00-22:00 2019-08-04 21:00:00 2019-08-04 22:00:00

print (df.dtypes)
Time              object
first     datetime64[ns]
second    datetime64[ns]
dtype: object

这里可能是提取日期时间部分的简便方法,例如小时,时间...:

df['hour1'] = df['first'].dt.hour
df['time1'] = df['first'].dt.time
print (df)
          Time               first              second  hour1     time1
0  19:00-20:00 2019-08-04 19:00:00 2019-08-04 20:00:00     19  19:00:00
1  20:00-21:00 2019-08-04 20:00:00 2019-08-04 21:00:00     20  20:00:00
2  21:00-22:00 2019-08-04 21:00:00 2019-08-04 22:00:00     21  21:00:00

print (df.dtypes)
Time              object
first     datetime64[ns]
second    datetime64[ns]
hour1              int64
time1             object
dtype: object