Python 从数据帧中删除异常值和周围数据

Python 从数据帧中删除异常值和周围数据,python,pandas,Python,Pandas,我有一个数据集,其中包含一些我想删除的异常值。 我想删除数据框中的0值,如下所示: df=pd.DataFrame({'Time':[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9],'data':[1.1,1.05,1.01,1.05,0,1.2,1.1,1.08,1.07,1.1]) 我可以这样做,以删除低于某个阈值的值: df.loc[df['data']

我有一个数据集,其中包含一些我想删除的异常值。 我想删除数据框中的0值,如下所示:

df=pd.DataFrame({'Time':[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9],'data':[1.1,1.05,1.01,1.05,0,1.2,1.1,1.08,1.07,1.1])
我可以这样做,以删除低于某个阈值的值:

df.loc[df['data']<0.5,'data']=np.NaN
这会给我一个没有“0”值的列表:

时间数据
0   0.0  1.10
1   0.1  1.05
2   0.2  1.01
3   0.3  1.05
40.4南
5   0.5  1.20
6   0.6  1.10
7   0.7  1.08
8   0.8  1.07
9   0.9  1.10
但是,我也对无效值周围的数据表示怀疑,并希望从异常值中删除“0.2”个时间单位的值。例如:

时间数据
0   0.0  1.10
1   0.1  1.05
20.2南
30.3南
40.4南
50.5南
60.6南
7   0.7  1.08
8   0.8  1.07
9   0.9  1.10

您可以获得所有测量错误的时间点的列表,并过滤所有附近的时间值:

bad_times=df.Time[df['data']<0.5]
对于处于不利时期的t:

df.loc[(df['Time']-t).abs()您可以获得所有测量错误的时间点的列表,并过滤所有附近的时间值:

bad_times=df.Time[df['data']<0.5]
对于处于不利时期的t:

df.loc[(df['Time']-t).abs()您可以获取要删除的时间列表,然后对这些行应用nan

df.loc[df['data'] < 0.5, 'data'] = np.NaN
l=df[df['data'].isna()]['Time'].values
l2=[]
for i in l:
    l2=l2+[round(i-0.1,1),round(i-0.2,1),round(i+0.1,1),round(i+0.2,1)]
df.loc[df['Time'].isin(l2), 'data'] = np.nan
df.loc[df['data']<0.5,'data']=np.NaN
l=df[df['data'].isna()]['Time'].值
l2=[]
对于l中的i:
l2=l2+[轮(i-0.1,1),轮(i-0.2,1),轮(i+0.1,1),轮(i+0.2,1)]
df.loc[df['Time'].isin(l2),'data']=np.nan

您可以获取要删除的时间列表,然后对这些行应用nan

df.loc[df['data'] < 0.5, 'data'] = np.NaN
l=df[df['data'].isna()]['Time'].values
l2=[]
for i in l:
    l2=l2+[round(i-0.1,1),round(i-0.2,1),round(i+0.1,1),round(i+0.2,1)]
df.loc[df['Time'].isin(l2), 'data'] = np.nan
df.loc[df['data']<0.5,'data']=np.NaN
l=df[df['data'].isna()]['Time'].值
l2=[]
对于l中的i:
l2=l2+[轮(i-0.1,1),轮(i-0.2,1),轮(i+0.1,1),轮(i+0.2,1)]
df.loc[df['Time'].isin(l2),'data']=np.nan