Python Pandas时间范围赋值问题:前导零致代码失效求助
问题解决方法
原代码存在几个关键错误,逐一修正后即可正常运行:
错误点分析
- 语法错误:时间值未用引号包裹,
07:30:00不是合法的Python语法,必须写成字符串形式'07:30:00'。 - 逻辑错误:条件写反了,应该是时间大于等于
07:30:00且小于等于20:00:00,原代码两个条件都是<=,无法筛选目标时间段。 - 布尔索引用法错误:Pandas中多条件筛选不能用
and,必须用&,且每个条件需用括号包裹(避免运算优先级冲突)。 - 前导零问题:如果
Time_of_Day列是字符串类型,HH:MM:SS格式的字符串比较逻辑和时间顺序完全一致,前导零不会影响判断,无需额外处理。
正确代码示例
情况1:Time_of_Day为字符串类型
直接用字符串比较即可,代码简洁高效:
# 假设要新增/修改的列名为'is_daylight',可根据实际需求调整 df.loc[(df['Time_of_Day'] >= '07:30:00') & (df['Time_of_Day'] <= '20:00:00'), 'is_daylight'] = 'daylight'
情况2:将列转为时间类型(更严谨)
如果需要后续做更多时间相关操作,建议先转成时间类型再比较:
import pandas as pd # 转换为时间类型(仅保留时分秒部分) df['Time_of_Day'] = pd.to_datetime(df['Time_of_Day'], format='%H:%M:%S').dt.time # 定义目标时间范围 start_time = pd.to_datetime('07:30:00').time() end_time = pd.to_datetime('20:00:00').time() # 标记目标时间段 df.loc[(df['Time_of_Day'] >= start_time) & (df['Time_of_Day'] <= end_time), 'is_daylight'] = 'daylight'
内容的提问来源于stack exchange,提问作者user12802554
相关产品推荐
相关产品推荐

