Я создал генератор кортежей, который извлекает информацию из файла, фильтруя только интересующие записи и преобразуя их в кортеж, который возвращает генератор.
Я пытаюсь создать DataFrame из:
import pandas as pd
df = pd.DataFrame.from_records(tuple_generator, columns = tuple_fields_name_list)
но выдает ошибку:
...
C:\Anaconda\envs\py33\lib\site-packages\pandas\core\frame.py in from_records(cls, data, index, exclude, columns, coerce_float, nrows)
1046 values.append(row)
1047 i += 1
-> 1048 if i >= nrows:
1049 break
1050
TypeError: unorderable types: int() >= NoneType()
Мне удалось работать, потребляя генератор в списке, но используя дважды память:
df = pd.DataFrame.from_records(list(tuple_generator), columns = tuple_fields_name_list)
Файлы, которые я хочу загрузить, большие, и потребление памяти имеет значение. Последняя попытка моего компьютера тратит два часа на попытку увеличить виртуальную память: (
Вопрос: Любой знает способ создания DataFrame из генератора записей напрямую, без предварительного преобразования его в список?
Примечание. Я использую python 3.3 и pandas 0.12 с Anaconda в Windows.
Update:
Это не проблема чтения файла, мой генератор кортежей делает это хорошо, он сканирует текстовый сжатый файл смешанных записей по строкам и преобразует только нужные данные в правильные типы, затем он дает поля в генераторе кортежей форма. Некоторые номера, он сканирует 2111412 записей в файле размером 130 МБ, около 6.5 ГБ без сжатия, примерно через минуту и с небольшой памятью.
Pandas 0.12 не позволяет генераторам, версия dev позволяет это, но поместить весь генератор в список, а затем преобразовать в кадр. Это неэффективно, но это что-то, что нужно делать внутри pandas. Тем временем я должен думать о покупке еще немного памяти.