Pandas比较时间列与datetime值出现语法错误如何修改代码
语法错误原因
- 自定义函数中if判断语句末尾缺少英文冒号,不符合Python基础语法规则
- 引用
hour列时未将列名用引号包裹,会被解释器识别为未定义变量 - 若未提前导入
datetime模块,调用datetime.time时也会触发报错
保留apply逻辑的修改方案(可读性优先)
将函数参数名改为row避免和整个DataFrame重名,补全所有语法缺失项:
import datetime import pandas as pd # 原有DataFrame构造逻辑 date1 = pd.Series(pd.date_range('2018-1-1 12:00:00', periods=2, freq='M')) date2 = pd.Series(pd.date_range('2019-3-11 21:45:00', periods=2, freq='W')) date_df = pd.DataFrame(dict(Start_date = date1, End_date = date2)) date_df['hour'] = date_df['End_date'].dt.time # 修改后的判断函数 def time_flag(row): if row['hour'] < datetime.time(hour=21, minute=46, second=0): return 1 else: return 0 date_df['NewColumn'] = date_df.apply(time_flag, axis=1)
更优向量化实现方案
pandas内置向量化运算效率远高于逐行apply,且代码更简洁易懂:
import datetime # 布尔值直接转整数,True对应1,False对应0 date_df['NewColumn'] = (date_df['hour'] < datetime.time(21,46,0)).astype('int')
内容的提问来源于stack exchange,提问作者RitaM
相关产品推荐
相关产品推荐

