【发布时间】:2020-07-20 06:05:37
【问题描述】:
我正在处理天气数据,并试图计算与我的时间序列中每小时观测值相对应的日光分钟数。
London = pd.read_csv(root_dir + 'London.csv',
usecols=['date_time','London_sunrise','London_sunset'],
parse_dates=['date_time'])
London.set_index(London['date_time'], inplace =True)
London['London_sunrise'] = pd.to_datetime(London['London_sunrise']).dt.strftime('%H:%M')
London['London_sunset'] = pd.to_datetime(London['London_sunset']).dt.strftime('%H:%M')
London['time'] = pd.to_datetime(London['date_time']).dt.strftime('%H:%M')
London['London_sun_mins'] = np.where(London['time']>=London['London_sunrise'], '60', '0')
London.head(6)
数据框:
date_time time London_sunrise London_sunset London_sun_mins
2019-05-21 00:00:00 00:00 05:01 20:54 0
2019-05-21 01:00:00 01:00 05:01 20:54 0
2019-05-21 02:00:00 02:00 05:01 20:54 0
2019-05-21 03:00:00 03:00 05:01 20:54 0
2019-05-21 04:00:00 04:00 05:01 20:54 0
2019-05-21 05:00:00 05:00 05:01 20:54 0
2019-05-21 06:00:00 06:00 05:01 20:54 60
我已经尝试使用条件参数来生成每小时的日照分钟数,即)如果是完整的日照时间,则为 60,如果是夜晚,则为 0。
当我尝试使用 timedelta 来生成日出和时间之间的差异时,即 05:00 和 05:01,未返回预期的输出 (59)。
一个简单的:
London['London_sun_mins'] = np.where(London['time']>=London['London_sunrise'], '60', '0')
但是,当我尝试扩展到:
London['London_sun_mins'] = np.where(London['time']>=London['London_sunrise'], London['time'] - London['London_sunrise'], '0')
返回以下错误:
unsupported operand type(s) for -: 'str' and 'str'
此外,当扩展到包括日出和日落时:
London['sunlightmins'] = London[(London['London_sunrise'] >= London['date_time'] & London['London_sunset'] <= London['date_time'])]
London['London_sun_mins'] = np.where(np.logical_and(np.greater_equal(London['time'],London['London_sunrise']),np.less_equal(London['time'],London['London_sunset'])))
返回相同的错误。感谢您对达到预期输出的所有帮助!
【问题讨论】:
标签: python-3.x pandas numpy datetime timedelta