从大的元组/行列表中有效地构造Pandas DataFrame

时间:2012-07-10 14:36:12

标签: python tuples pandas dta

我继承了以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)

我很好奇是否有一种有效的方法将其安排到Pandas DataFrame中。根据我的阅读,逐行构建DataFrame看起来效率很低......但我的选择是什么?

我写了一个非常慢的第一遍,只是将每个元组作为单行DataFrame读取并附加它。只是想知道是否还有其他事情会更好。

2 个答案:

答案 0 :(得分:20)

pandas.DataFrame(initialload, columns=list_of_column_names)

答案 1 :(得分:3)

Pandas版本0.12以后应该支持直接加载Stata格式(Reference)。

来自文档:

  

顶级函数read_stata将读取dta格式文件并返回DataFrame:类StataReader将在初始化时读取给定dta文件的标头。它的方法data()将读取观察结果,将它们转换为返回的DataFrame:

 pd.read_stata('stata.dta')