Исключение определенных строк при импорте данных с помощью 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)