删除在Python中包含NaN的行之前和之后的行?

dro*_*ely 5 python numpy dataframe pandas

我正在尝试使用带有numpy和pandas的python清理实验数据。我的一些测量令人难以置信。我想从同一样本中删除这些测量以及前两个和后两个测量。我正在尝试找到一种优雅的方法来实现此目标,而无需使用for循环,因为我的数据帧非常大。

我的资料:

>>>df

    Date    Time    Sample  Measurement
index
7737    2019-04-15  06:40:00    A   6.560
7739    2019-04-15  06:50:00    A   1.063
7740    2019-04-15  06:55:00    A   1.136
7741    2019-04-15  07:00:00    A   1.301
7742    2019-04-15  07:05:00    A   1.435
7743    2019-04-15  07:10:00    A   1.704
7744    2019-04-15  07:15:00    A   1.961
7745    2019-04-15  07:20:00    A   2.023
7746    2019-04-15  07:25:00    A   6.284
7747    2019-04-15  07:30:00    A   2.253
7748    2019-04-15  07:35:00    A   6.549
7749    2019-04-15  07:40:00    A   2.591
7750    2019-04-15  07:45:00    A   6.321
7752    2019-04-15  07:55:00    A   0.937
7753    2019-04-15  08:00:00    B   0.372
7754    2019-04-15  08:05:00    B   0.382
7755    2019-04-15  08:10:00    B   0.390
7756    2019-04-15  08:15:00    B   0.455
7757    2019-04-15  08:20:00    B   6.499

Run Code Online (Sandbox Code Playgroud)

import numpy as np
import pandas as pd 

df['Measurement'] = np.where(df['Measurement']>6.0, np.nan, df['Measurement'])

Run Code Online (Sandbox Code Playgroud)

>>>df

    Date    Time    Sample  Measurement
index
7737    2019-04-15  06:40:00    A   NaN
7739    2019-04-15  06:50:00    A   1.063
7740    2019-04-15  06:55:00    A   1.136
7741    2019-04-15  07:00:00    A   1.301
7742    2019-04-15  07:05:00    A   1.435
7743    2019-04-15  07:10:00    A   1.704
7744    2019-04-15  07:15:00    A   1.961
7745    2019-04-15  07:20:00    A   2.023
7746    2019-04-15  07:25:00    A   NaN
7747    2019-04-15  07:30:00    A   2.253
7748    2019-04-15  07:35:00    A   NaN
7749    2019-04-15  07:40:00    A   2.591
7750    2019-04-15  07:45:00    A   NaN
7752    2019-04-15  07:55:00    A   0.937
7753    2019-04-15  08:00:00    B   0.372
7754    2019-04-15  08:05:00    B   0.382
7755    2019-04-15  08:10:00    B   0.390
7756    2019-04-15  08:15:00    B   0.455
7757    2019-04-15  08:20:00    B   NaN

Run Code Online (Sandbox Code Playgroud)

我使用删除了行

df= df[np.isfinite(df['Measurement'])]
Run Code Online (Sandbox Code Playgroud)

在删除样本中包含NaN的之前和之后的2行之后,我试图获得结果(请注意,由于此度量属于样本B,因此必须保留7753)。


    Date    Time    Sample  Measurement
index
7741    2019-04-15  07:00:00    A   1.301
7742    2019-04-15  07:05:00    A   1.435
7743    2019-04-15  07:10:00    A   1.704
7753    2019-04-15  08:00:00    B   0.372
7754    2019-04-15  08:05:00    B   0.382


Run Code Online (Sandbox Code Playgroud)

Sid*_*Sid 1

df.loc[((df['Measurement']>6) & (df['Sample'] == 'A')),'drop'] = 'Y'

# making sure B readings dont get dropped

l = df.index[df['drop'] == 'Y'].tolist()
l_drop = []
for i in l:
    l_drop.append(i-1)
    l_drop.append(i+1)
    l_drop.append(i+2)

df.drop(df.index[l_drop],inplace=True)
Run Code Online (Sandbox Code Playgroud)

没有迭代数据框。