2016-08-09 1 views
0

私にはたくさんのExcelファイルがあります。これらのファイルのそれぞれは、の特定の時点にあるすべてのサブジェクトに対して1つまたは複数の変数を含んでいます。各変数について、私は、例えば、10の異なる時点で変数の値を格納する10のファイルを持っています。私の最終的な目標は、パネルシリーズを設定することです。複数のデータフレームをパネルに変換する

各ファイルに変数が1つしかないとします。各変数(またはアイテム)について、空のDataFrame item = pd.DataFrame()を初期化し、10個のファイルすべてを読み込んで空のDataFrame item = item.append(pd.DataFrame(df))に追加します。ここで、dfは新しいファイルのものです。これらの10のDataFramesのそれぞれは、1 x #subjectsの次元を持っています。したがって、私は最終的に10 x #subjectを持っています。私はこれをpf = pd.Panel({'variable name': item})を使ってパネルフレームに変換します。 簡単かつ実用的な方法は、私はそれぞれのファイルに2つの以上の変数を持っている場合は、この問題にアプローチするためにどのようなものです:今、私は簡単に...多くの他の項目との大きなパネルフレームに

質問これを追加することができます?私は上記のアプローチにこだわっている場合、私はそれらを付加した後

    subject1 subject2 
variable1 2000  val   val 
variable2 2000  val   val 
variable1 2001  val   val 
variable2 2001  val   val 
... 

につながる、各ファイルのディメンション#variables x #subjectsのデータフレームを持っているでしょう。明らかにこれをパネルデータに変換するのは難しい構造です。

私は自分の周りで働くことができます。適切な構造を維持するために "正しい行"を追加するか、同じファイルを何度も読み込むことができますが、これは煩雑でコストがかかります。この作業を簡単に行うメソッドが必要ですが、ドキュメントでそれらを見つけることができませんでした。

ありがとうございました。

答えて

2

A Panelデータが三次元的に探求することを可能にする、本質的にDataFrameオブジェクトのスタックです。したがって、各ファイルが1つの時点を表している限り、どのように多くの変数またはサブジェクトが各ファイルに表示されるかは関係ありません。各ファイルをDataFrameにインポートし、Panelを作成します。

これは、ファイル名のリストに対してforループを使用することで実現できます。あなたのループでは、データの元の年をチェックして、他のすべてのDataFrameオブジェクトを含む辞書に結果を保存することができます。これにより、データフレームの辞書をパネルに簡単に変換できます。

DataFrameフォーマットのようなものに見える場合:これは、プロパティを持つPanelをyeilds

pn=pd.Panel(data={2010:df2010, 2015:df2015, 2020:df2020}) 

Dimensions: 3 (items) x 4 (major_axis) x 2 (minor_axis) 
Items axis: 2010 to 2020 
Major_axis axis: Var1 to Var4 
Minor_axis axis: Gerald to Kate 

 Gerald Kate 
Var1  1  5 
Var2  2  6 
Var3  3  7 
Var4  4  8 

を次に、あなたのようなもので、あなたのPanelを作成することができます

スライスb Y年:

print(pn[2015]) 


     Gerald Kate 
Var1  3 15 
Var2  6 18 
Var3  9 21 
Var4  12 24 

個々の変数や被写体のより良いビューを取得するための軸を切り替えることも可能である:

print(pn.transpose('minor_axis','major_axis','items')['Gerald']) 

     2010 2015 2020 
Var1  1  3  9 
Var2  2  6 18 
Var3  3  9 27 
Var4  4 12 36 
+1

あなたの答え、@Altonキャンベルに基づいて、私は私が望んだ:I空のdict 'data = {}'を初期化し、 'data [year] = df'(ここでdfは追加する1年のDataFrameです)のループで各年のデータを挿入し、' item = pd.Panel(data) 'を読み込み、' item = item.swapaxes(axis1 = 'items'、axis2 = 'major') 'のスワップを行います(なぜなら、ドキュメントにしたがって年を長軸にしたいからです)。ありがとう! – Jhonny

関連する問題