在特定分钟删除行

Dropping rows at specific minutes

我正在尝试在特定分钟 (05,10, 20) 删除行 我有日期时间作为索引

df5['Year'] = df5.index.year
df5['Month'] = df5.index.month
df5['Day']= df5.index.day
df5['Day_of_Week']= df5.index.day_name()
df5['hour']= df5.index.strftime('%H')
df5['Min']= df5.index.strftime('%M')
df5

那我运行下面

def clean(df5):
for i in range(len(df5)):
    hour = pd.Timestamp(df5.index[i]).hour
    minute = pd.Timestamp(df5.index[i]).minute
    if df5 = df5[(df5.index.minute ==5) | (df5.index.minute == 10)| (df5.index.minute == 20)]
        df.drop(axis=1, index=i, inplace=True)

它返回无效的语法错误。

您可以使用布尔索引来完成它,假设索引已经被解析为日期时间。

df5 = df5[~((df5.index.minute == 5) | (df5.index.minute == 10) | (df5.index.minute == 20))]

或同一个答案的反面:

df5 = df5[(df5.index.minute != 5) | (df5.index.minute != 10) | (df5.index.minute != 20)]

一般来说,在 IF 语句中组合逻辑 OR 的正确语法如下:

    today = 'Saturday'
    
    if today=='Sunday' OR today=='Saturday':
        print('Today is off. Rest at home')

在你的情况下,你可能应该使用这样的东西:

if df5 == df5[(df5.index.minute ==5)] OR df5[(df5.index.minute ==10)]
        ......

最后说明:

您在使用 ===

时犯了一些错误

在Python(以及许多其他编程语言)中,单个等号=用于为变量赋值,而使用两个连续的等号==检查 2 个表达式是否给出相同的值。

= is an assignment operator

== is an equality operator

这里不需要循环,也not recommended.

使用DatetimeIndex.minute with Index.isin and inverted mask by ~ filtering in boolean indexing:

df5 = df5[~df5.index.minute.isin([5, 10, 20])]

为了重用列 df5['Min'] 使用字符串值:

df5 = df5[~df5['Min'].isin(['05', '10', '20'])]

总计:

def clean(df5):
    return df5[~df5.index.minute.isin([5, 10, 20])]