Исключение определенных строк при импорте данных с помощью Numpy

Я генерирую наборы данных из экспериментов. Я в конечном итоге с CSV-наборы данных, которые, как правило, n x 4 размерный (n строки; n > 1000 а также 4 колонны). Однако из-за артефакта процесса сбора данных, как правило, первая пара строк и последняя пара строк имеют только 2 или 3 столбца. Итак, набор данных выглядит так:

8,0,4091
8,0,
8,0,4091,14454
10,0,4099,14454
2,0,4094,14454
8,-3,4104,14455
3,0,4100,14455
....
....
14,-1,4094,14723
0,3,4105,14723
7,0,4123,14723
7,
6,-2,4096,
3,2,

Как видите, первые две строки и последние три не имеют 4 ожидаемых столбцов. Когда я пытаюсь импортировать этот файл в NumPy np.loadtxt(filename, delimiter = ',')Я получаю ошибку. После удаления строк, которые имеют менее 4 столбцов (в данном случае первые 2 строки и последние 3 строки), импорт работает нормально. Два вопроса: 1. Почему обычный импорт не работает. Я не уверен, какая именно ошибка в этом импорте. Другими словами, почему проблема не связана с одинаковым количеством столбцов во всех строках? 2. В качестве обходного пути я знаю, как игнорировать первые две строки при импорте файлов с numpy np.loadtxt(filename, skiprows= 2), но есть ли простой способ также выбрать фиксированное количество строк в нижней части, чтобы игнорировать?

Примечание: это НЕ о поиске уникальных строк в массиве NumPy. Это больше об импорте данных CSV, которые неоднородны по количеству столбцов, содержащихся в каждой строке.

2 ответа

Решение

Ваш вопрос похож (дублирован) на Использование genfromtxt для импорта данных csv с отсутствующими значениями в numpy

1) Я не уверен, почему это поведение по умолчанию.

  • Может быть, чтобы предупредить пользователей, что файл CSV может быть поврежден.
  • Может быть, оптимизировать массив и сделать его N x M вместо нескольких длин столбцов.

2) Используйте genfromtext numpy. Для этого вам нужно заранее знать правильное количество столбцов.

data = numpy.genfromtxt('data.csv', delimiter=',', usecols=[0,1,2,3], invalid_raise=False)

Надеюсь это поможет!

Ты можешь использовать genfromtxt, что позволяет пропускать строки в начале и в конце:

np.genfromtxt('array.txt', delimiter=',', skip_header=2, skip_footer=3)
Другие вопросы по тегам