Эффективно построить Pandas DataFrame из большого списка кортежей / строк

Я унаследовал файл данных, сохраненный в формате Stata .dta. Я могу загрузить его сscikits.statsmodels genfromdta() функция. Это помещает мои данные в одномерный массив NumPy, где каждая запись представляет собой строку данных, хранящуюся в 24-кортеже.

In [2]: st_time = time.time(); initialload = sm.iolib.genfromdta("/home/myfile.dta"); ed_time = time.time(); print (ed_time - st_time)
666.523324013

In [3]: type(initialload)
Out[3]: numpy.ndarray

In [4]: initialload.shape
Out[4]: (4809584,)

In [5]: initialload[0]
Out[5]: (19901130.0, 289.0, 1990.0, 12.0, 19901231.0, 18.0, 40301000.0, 'GB', 18242.0, -2.368063, 1.0, 1.7783716290878204, 4379.355, 66.17669677734375, -999.0, -999.0, -0.60000002, -999.0, -999.0, -999.0, -999.0, -999.0, 0.2, 371.0)

Мне любопытно, есть ли эффективный способ организовать это в DataFrame Pandas. Из того, что я прочитал, построение DataFrame строка за строкой кажется довольно неэффективным ... но каковы мои варианты?

Я написал довольно медленный первый проход, который просто читает каждый кортеж как однострочный DataFrame и добавляет его. Просто интересно, известно ли что-нибудь еще лучше.

 eumiro10 июл. 2012 г., 16:38
Есть лиpandas.DataFrame(initialload) вернуть то, что вы ищете?
 ely10 июл. 2012 г., 16:41
Вот это да. Почти. Это погубило некоторые имена столбцов, но я легко могу это исправить. Псих. Спасибо, я бы никогда не догадался об этом даже после прочтения документации Панд. Извините, это было так просто.

Ответы на вопрос(2)

(Ссылка).

Из документации:

The top-level function read_stata will read a dta format file and return a DataFrame: The class StataReader will read the header of the given dta file at initialization. Its method data() will read the observations, converting them to a DataFrame which is returned:

 pd.read_stata('stata.dta')
Решение Вопроса
pandas.DataFrame(initialload, columns=list_of_column_names)

Ваш ответ на вопрос