Pandas read_stata () с большими .dta-файлами

Я работаю с файлом Stata .dta, который составляет около 3,3 гигабайта, поэтому он большой, но не слишком большой. Я заинтересован в использовании IPython и пытался импортировать .dta-файл с помощью Pandas, но происходит что-то неуловимое. В моем ящике 32 гигабайта оперативной памяти, и попытка загрузить файл .dta приводит к использованию всей используемой ОЗУ (через ~ 30 минут), а мой компьютер отключается. Это не «правильно», потому что я могу открыть файл в R, используя read.dta () из внешнего пакета, без проблем, и работа с файлом в Stata прекрасна. Код, который я использую:

%time myfile = pd.read_stata(data_dir + 'my_dta_file.dta') 

и я использую IPython в Enowedt's Canopy. Причина «% времени» заключается в том, что я заинтересован в сравнении этого показателя с R read.dta ().

Мои вопросы:

  1. Есть ли что-то, что я делаю неправильно, что приводит к возникновению проблем у Панд?
  2. Есть ли способ обхода данных в кадре данных Pandas?

4 Solutions collect form web for “Pandas read_stata () с большими .dta-файлами”

Вот небольшая функция, которая была удобна для меня, используя некоторые функции pandas которые, возможно, не были доступны, когда вопрос был первоначально задан:

 def load_large_dta(fname): import sys reader = pd.read_stata(fname, iterator=True) df = pd.DataFrame() try: chunk = reader.get_chunk(100*1000) while len(chunk) > 0: df = df.append(chunk, ignore_index=True) chunk = reader.get_chunk(100*1000) print '.', sys.stdout.flush() except (StopIteration, KeyboardInterrupt): pass print '\nloaded {} rows'.format(len(df)) return df 

Я загрузил файл Stag 11G за 100 минут с этим, и мне приятно иметь что-то, чтобы играть, если мне надоело ждать и ударить cntl-c .

Этот ноутбук показывает это в действии .

Вопрос 1.

Я не могу сказать об этом.

Вопрос 2.

Подумайте о том, как экспортировать ваш .dta файл в .csv используя командный outsheet команды Stata или export delimited а затем используя read_csv() в pandas. Фактически, вы можете взять вновь созданный .csv файл, использовать его как вход для R и сравнить с pandas (если это интересно). read_csv , скорее всего, имел больше тестов, чем read_stata .

Запустите help outsheet о деталях экспорта.

Для всех людей, которые заканчиваются на этой странице, обновите Pandas до последней версии. У меня была эта точная проблема с застопоренным компьютером во время загрузки (300 МБ файла Stata, но только с системным RAM 8 ГБ), а обновление с v0.14 до v0.16.2 решило проблему.

В настоящее время это v 0.16.2. Там были значительные улучшения скорости, хотя я не знаю специфики. См.: Наиболее эффективная настройка ввода-вывода между Stata и Python (Pandas)

Вы не должны читать 3GB + файл в объект данных в памяти, это рецепт катастрофы (и не имеет ничего общего с пандами). Правильный способ сделать это – mem-map файл и доступ к данным по мере необходимости.

Вам следует рассмотреть возможность преобразования вашего файла в более подходящий формат ( csv или hdf ), а затем вы можете использовать оболочку Dask вокруг pandas DataFrame для загрузки данных по мере необходимости:

 from dask import dataframe as dd # If you don't want to use all the columns, make a selection columns = ['column1', 'column2'] data = dd.read_csv('your_file.csv', use_columns=columns) 

Это будет прозрачно следить за загрузкой, многоядерной обработкой данных и всем этим.

  • отправка кода из vim в stata
  • Какие типы языков позволяют программировать создание имен переменных?
  • Миграция из Stata в Python
  • Python - лучший язык программирования в мире.