Удаление повторяющихся данных Python - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть огромная база данных о распределении потоков по всей комнате.Но проблема в том, что сетки слишком малы, поэтому некоторая их часть бесполезна и затрудняет вычисления.На мой у размерность на сетку длина 0,00032.И у меня размерность от 0 до 0,45.Как вы можете понять, есть много бесполезных данных.

Я хочу сделать так, чтобы длина каждой сетки равнялась 0,00128, вместо этого удаляя строки, которые не делятся на 0,00128, как это сделать?

trainProcessed = trainProcessed[trainProcessed[:,4]%0.00128==0]

Я пробовал эту строку кода (trainProcessed - мои данные в виде массива), но это выглядит как 0 -> 0,00128 -> 0,00256 -> 0,00512.Но есть строки, которые имеют значение 0,00384, и это тоже делится на 0,00128.Кстати, форма массива: (888300,8).

Пример данных:

X: [0,0,0,0,0.00031999,0.00031999,0.00063999,0.00064,0.00096, 0,00096,0,000128,0,000128]

Пример вывода:

X: [0,0,0,0,0.000128,0.000128]

1 Ответ

0 голосов
/ 25 февраля 2019

Для этого случая и для функции по модулю я буду использовать десятичное число:

import pandas as pd
from decimal import Decimal
df = pd.DataFrame({'values': [0.00128, 0.00384, 0.367, 0.128, 0.34]})
print(df)

#convert float to str then Decimal and apply the modulo
#keep only rows which are dividable by 0.00128
filter = df.apply(lambda r: Decimal(str(r['values'])) % Decimal('0.00128')  == Decimal('0') ,axis=1)

#if data are smaller you could multiply by power of 10 before modulo
#filter = df.apply(lambda r: Decimal(str(r['values'] * 1000)) % Decimal('0.00128')  == Decimal('0') ,axis=1)
df=df[filter].reset_index(drop=True)

#the line: df=df[~filter].reset_index(drop=True) does the (not filter)
print(df)

начальный вывод:

    values
0  0.00128
1  0.00384
2  0.36700
3  0.12800
4  0.34000

конечный вывод

    values
0  0.00128
1  0.00384
2  0.12800
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...