如何使用时间戳确定是白天还是黑夜

时间:2019-06-26 05:14:53

标签: python pandas datetime timestamp

我想从数据框中的“时间戳”列中查找白天还是晚上。时间戳列的值如下: 20:0,14:30、6:15、5:0、4:0等

我使用了for循环,但它是日夜随机产生的。

for x in data['timestamp']:
if x> '12:00':
     print('Day')

 else:
     print('Night')

我希望在我的时间戳列旁边创建一个列,该列的值在时间戳介于上午6:00至18:00之间为“天”,而时间戳为介于18:01至上午5:59之间的“夜晚”。 >

3 个答案:

答案 0 :(得分:1)

使用to_timedelta将值转换为时间增量,并使用Series.between进行比较,然后使用numpy.where创建新列:

data = pd.DataFrame({
    'timestamp' : ['6:00', '18:00', '18:01', '5:59'],

})

mask = (pd.to_timedelta(data['timestamp'] + ':00')
          .between(pd.Timedelta('6h'),pd.Timedelta('18h')))
data['new'] = np.where(mask, 'Day', 'Night')
print (data)
  timestamp    new
0      6:00    Day
1     18:00    Day
2     18:01  Night
3      5:59  Night

答案 1 :(得分:1)

timestamp = ['6:00', '18:00', '18:01', '5:59']
for time in timestamp:
   hourMin = time.split(":")
   hour = int(hourMin[0])
   mint = int(hourMin[1])
   if hour>= 6 and hour <= 18:
       if(hour == 18):
           if(mint > 0):
               print("Night\n")
           else:
               print("Day\n")
       else:
           print("Day\n")
   else:
       print("Night\n")

答案 2 :(得分:0)

我会把小时数部分解析为int,然后检查它是否在6到18之间:

hour = int(x.split(':'))[0]
if hour >= 6 and hour < 18:
    print('Day')
else:
    print('Night')