17

Stata.dta形式で保存されたデータファイルを継承しました。関数でロードできますscikits.statsmodels genfromdta()。これにより、データが1次元の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)

これをPandasDataFrameに配置する効率的な方法があるかどうか知りたいです。私が読んだことから、DataFrameを行ごとに構築することは非常に非効率的であるように思われます...しかし、私のオプションは何ですか?

各タプルを単一行のDataFrameとして読み取り、それを追加するだけの、かなり遅いファーストパスを作成しました。他にもっと良いことが知られているのかどうか疑問に思っています。

4

2 に答える 2

21
pandas.DataFrame(initialload, columns=list_of_column_names)
于 2012-07-10T14:44:48.687 に答える
3

パンダのバージョン0.12以降では、Stata形式の直接ロードをサポートする必要があります(リファレンス)。

ドキュメントから:

トップレベルの関数read_stataは、dta形式のファイルを読み取り、DataFrameを返します。クラスStataReaderは、初期化時に指定されたdtaファイルのヘッダーを読み取ります。そのメソッドdata()は観測値を読み取り、それらをDataFrameに変換して返されます。

 pd.read_stata('stata.dta')
于 2013-09-09T03:23:28.293 に答える