如何在pandas中基于datetime64类型列筛选分钟和秒均为0的行
正确筛选方法
直接使用pandas datetime列的内置属性做向量化筛选即可,代码如下:
heart_rate_hourly = heart_rate_seconds[(heart_rate_seconds['time'].dt.minute == 0) & (heart_rate_seconds['time'].dt.second == 0)]
报错原因说明
TypeError: 'Series' object is not callable报错heart_rate_seconds['time'].dt.second是pandas封装的属性,不是可调用的方法,不需要加括号执行,加括号会触发该报错。ValueError: The truth value of a Series is ambiguous报错
pandas布尔索引中不能使用Python原生的and/or做多条件逻辑判断,需要使用按位运算符&(与)/|(或),同时每个判断条件必须用括号包裹,避免运算符优先级导致的逻辑错误。另外strftime("%M")返回的是字符串类型的分钟值,和整数0判断相等永远不成立。- 遍历DataFrame的
AttributeError报错
直接遍历heart_rate_seconds默认遍历的是DataFrame的列名(字符串类型),不是每行数据,自然不存在second属性。如果要逐行遍历需要用.iterrows()方法,但逐行遍历效率远低于向量化筛选,不推荐使用。
内容的提问来源于stack exchange,提问作者Martin Wickett
相关产品推荐
相关产品推荐

