pandas DataFrame datetime索引下删除特定分钟行报语法错误如何解决
语法错误原因
你的代码存在多处语法和逻辑错误,导致触发invalid syntax报错,具体错误如下:
- 缩进错误:Python强制要求函数、循环、条件判断的代码块统一缩进4个空格,你定义
clean函数后,内部的循环、判断代码都没有做缩进,不符合语法规则。 if语句语法错误:if关键字后需要跟随布尔判断表达式,你写的if df5 = df5[(df5.index.minute ==5) | ...]是赋值操作,不属于判断逻辑,且该行末尾缺少必要的冒号:。- 变量名不匹配:你定义的函数参数是
df5,但调用drop方法时写的是df.drop,变量名不存在。 - 逻辑错误:即使修复语法问题,边遍历DataFrame边删除行的操作会导致索引动态偏移,出现删错行、漏删的问题,完全不推荐用循环实现该需求。
解决方法
你完全不需要额外提取时间维度字段,也不需要写循环遍历,Pandas支持向量化操作直接过滤数据,一行代码即可完成需求:
# 直接过滤掉分钟为5、10、20的行,生成新的清洗后DataFrame df_cleaned = df5[~df5.index.minute.isin([5, 10, 20])]
如果需要封装为函数,正确写法如下:
def clean(df): # 入参为待清洗的datetime索引DataFrame,返回清洗后的结果 return df[~df.index.minute.isin([5, 10, 20])] # 调用函数 df5 = clean(df5)
以上代码效率远高于循环遍历,也不会出现索引错位的问题。
内容的提问来源于stack exchange,提问作者Sedi
相关产品推荐
相关产品推荐

