Удаление выбросов и окружающих данных из фрейма данных - PullRequest
0 голосов
/ 11 октября 2019

У меня есть набор данных, содержащий некоторые выбросы, которые я хотел бы удалить. Я хочу удалить значение 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':

   Time  data
0   0.0  1.10
1   0.1  1.05
2   0.2  1.01
3   0.3  1.05
4   0.4   NaN
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» в единицах времени от выбросов. Как следующее:

   Time  data
0   0.0  1.10
1   0.1  1.05
2   0.2   NaN
3   0.3   NaN
4   0.4   NaN
5   0.5   NaN
6   0.6   NaN
7   0.7  1.08
8   0.8  1.07
9   0.9  1.10

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Вы можете получить список времени, который нужно удалить, и затем применить нан для этих строк.

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
1 голос
/ 11 октября 2019

Вы можете получить список всех моментов времени, в которые у вас есть неверные измерения, и отфильтровать все близлежащие значения времени:

bad_times = df.Time[df['data'] < 0.5]

for t in bad_times:
    df.loc[(df['Time'] - t).abs() <= 0.2, 'data'] = np.NaN

результат:

>>> print(df)
   Time  data
0   0.0  1.10
1   0.1  1.05
2   0.2   NaN
3   0.3   NaN
4   0.4   NaN
5   0.5   NaN
6   0.6   NaN
7   0.7  1.08
8   0.8  1.07
9   0.9  1.10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...