У меня есть большой текстовый файл, разделенный полуколоновым. Я пытаюсь получить значения столбца (например, второго столбца) и работать с ним итерационно с помощью numpy. Пример данных, содержащихся в текстовом файле приводится ниже:Доступ к данным в кусках с использованием Python Pandas
10862;2;1;1;0;0;0;3571;0;
10868;2;1;1;1;0;0;3571;0;
10875;2;1;1;1;0;0;3571;0;
10883;2;1;1;1;0;0;3571;0;
...
11565;2;1;1;1;0;0;3571;0;
11572;2;1;1;1;0;0;3571;0;
11579;2;1;1;1;0;0;3571;0;
11598;2;1;1;1;0;0;3571;0;
11606;2;1;1;
Пожалуйста, обратите внимание, что последняя строка не может содержать такое же число значений, как и предыдущие.
Я пытаюсь использовать pandas.read_csv для чтения этого большого файла кусками. Для примера, давайте предположим, что размер порции составляет 40.
я пытался до сих пор два различных подхода:
1) Набор nrows
и итеративно увеличить skiprows
таким образом, чтобы прочитать всю файл по куску.
nrows_set = 40
n_it = 0
while(1):
df = pd.read_csv(filename, nrows=nrows_set , sep=';',skiprows = n_it * nrows_set)
vect2 = df[1] # trying to access the values of the second column -- works
n_it = n_it+1
Проблема при доступе к концу файла: Панды генерирует ошибку, когда те, пытается прочитать число строк превышает количество строк, содержащихся в файле. Например, если файл содержит 20 строк, а nrows
- 40, файл не может быть прочитан. Мой первый подход, следовательно, вызвал ошибку, когда я пытался прочитать последние 40 строк моего файла, когда осталось менее 40 строк.
Я не знаю, как проверить конец файла перед попыткой прочитать из файла - и я не хочу загружать весь файл, чтобы получить полный номер строки, так как файл большой. Следовательно, я попробовал второй подход.
2) chunksize
. Это хорошо работает, но у меня есть вопрос, когда я затем попытаться Асесс данные в куске:
reader = pd.read_csv(filename, chunksize=40, sep=';')
for chunk in reader :
print(chunk) # displays data -- the data looks correct
chunk[1] # trying to access the values of the second column -- generates an error
Какой тип данных chunk
, и как я могу преобразовать его так, как работает эта операция?
Как можно получить количество строк, содержащихся в файле, без загрузки всего файла в память (решение 1))?
Благодарим за помощь! Gaelle
Отлично! Я просто пытался, и он работает отлично. Благодарю вас за быстрый ответ. Gaelle – Gaelle
Извините, я слишком скоро говорил, у меня такая же ошибка, как раньше. np.diff (chunk.iloc [:, 1]) # генерирует ошибку Я думаю, я должен использовать что-то вроде pandas.DataFrame.as_matrix – Gaelle
@Gaelle, вы можете использовать подобный метод панд: 'chunk.ix [ условие, 'col_name']. diff() ' – MaxU