удаление последовательностей из данных Pandas Python Numpy - PullRequest
0 голосов
/ 12 февраля 2019

Я пробовал следующее:

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.read_csv("training.csv")
>>> data_raw = df.values
>>> data = []
>>> seq_len = 5
>>> for index in range(len(data_raw) - seq_len):
...     data.append(data_raw[index: index + seq_len])
...
>>> len(data)
1994
>>> len(data_raw)
1999
>>> del data[0]

Данные доступны здесь: training.csv
Я видел, что del удаляет первый элемент измассив.И переставить значения так, как это было в 1-й позиции, теперь в 0-й позиции и т. Д.
Я хочу удалить значения в индексах: 0,4,5,9,10,14, и т. Д.
Но это невозможно сделать стекущий оператор del, поскольку он будет переставлять значения.
Пожалуйста, помогите мне найти недостающую часть.

Ответы [ 4 ]

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

Для начала, желаемые индексы удаления: 0,4,5,9,10,14,15,19,20,24,25,29... может быть сгенерировано:

indices = []
for i in range(1,401):
    indices.append(5*(i-1))
    indices.append(5*i-1)
del indices[-1] # This is to remove 1999, which is out of index for df
print(indices[:12])
[0, 4, 5, 9, 10, 14, 15, 19, 20, 24, 25, 29]

Затем с помощью np.delete:

data_raw = np.random.randint(0, 10, size=(1999, 10))
new_data = np.delete(data_raw, indices, axis=0) # Since this is not inplace op

Проверка:

np.array_equal(new_data[:6],data_raw[[1,2,3,6,7,8]])
                                      # Where 0,4,5,9 is removed
# True
0 голосов
/ 12 февраля 2019

Вот простой способ преодолеть это:

a = list(range(10))
remove = [0,4,5]

Допустим, вы хотите удалить индексы в remove из a.Что вы можете сделать, это отсортировать элементы в remove в обратном порядке, а затем удалить их из a в цикле for следующим образом:

for i in sorted(remove, reverse=True):
    del a[i] 

Выход

[1, 2, 3, 6, 7, 8, 9]
0 голосов
/ 12 февраля 2019

другой способ сделать это

a = list(range(10))

print(a)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

to_drop = [0,4,5,9] #indices to drop

values = [a[i] for i in to_drop] # values corresponding to the indices

new_v = [a.remove(v) for v in values] # new list after dropping the values

Вывод

[1, 2, 3, 6, 7, 8]

Я имею в виду удалить = [0,4,5,9],это должна быть последовательность в списке удаления, если массив равен 10 значениям.Как я могу создать его динамически?

Это для 100 значений массива.Сгенерировал индексы, где его нужно отбросить для размера партии 10. Исправьте меня, если я неправильно интерпретировал

to_drop = [[j+(i*10) for j in [0,4,5,9]] for i in range(10)]

O / P

[[0, 4, 5, 9],
 [10, 14, 15, 19],
 [20, 24, 25, 29],
 [30, 34, 35, 39],
 [40, 44, 45, 49],
 [50, 54, 55, 59],
 [60, 64, 65, 69],
 [70, 74, 75, 79],
 [80, 84, 85, 89],
 [90, 94, 95, 99]]
0 голосов
/ 12 февраля 2019

вы можете сделать это следующим образом

пример кода:

index = [0,4,5,9,10,14]
for i, x in enumerate(index):
    index[i] -= i

print(index)


for i in index:
    del data[i]
...