2012-07-10 104 views
15

我已经继承了以Stata .dta格式保存的数据文件。我可以用scikits.statsmodelsgenfromdta()函数加载它。这将我的数据放入一维NumPy数组中,其中每个条目是一行数据,存储在一个24元组中。从元组/行的大列表中有效地构造Pandas DataFrame

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, 199.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。从我读过的内容来看,逐行建立DataFrame似乎效率很低......但我的选择是什么?

我写了一个非常缓慢的第一遍,它将每个元组读取为单行DataFrame并添加它。只是想知道是否还有其他什么更好。大熊猫

+0

是否'pandas.DataFrame(initialload)'返回你要搜索的内容? – eumiro 2012-07-10 14:38:01

+0

哇。几乎。它伪装了一些列名,但我可以很容易地解决这个问题。疯。谢谢,即使阅读了熊猫文档,我也从未猜到过。对不起,这很简单。 – ely 2012-07-10 14:41:05

回答

19

如果我的评论回答了你的问题,我的回答没有对任何评论更多... ;-)

pandas.DataFrame(initialload, columns=list_of_column_names) 
3

版本0.12起应支持直接加载的Stata格式(Reference)。

从文档:

顶级功能read_stata会读DTA格式文件,并且返回一个数据框:类StataReader将在初始化时读取指定的DTA文件的标题。其方法数据()将读取的意见,把它们转换成其返回一个数据框:

pd.read_stata('stata.dta') 
相关问题