2016-05-02 15 views
2

作業中の面倒なタスクを自動化するためのコーディングを自分自身で教えようとしています。私は意図しない無知をお詫びします。パンダ:データフレームのリストを繰り返し、各シートをExcelシートにエクスポートする

私はpandas(python 3.x)にデータフレームを作成しました。私は別のExcelシートに各データフレームを印刷したいと思います。ここで私は2つのデータフレームのために持っているものですが、それは完璧に動作しますが、データフレームのリストをループして、より動的にすることができます。

writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter') 
Data.to_excel(writer, sheet_name="Data") 
ByBrand.to_excel(writer, sheet_name="ByBrand") 
writer.save() 

十分に簡単ですが、作成する必要のある50枚以上のシートがある場合は面倒です。ここで

は、それが機能しなかった、私が試したものです:

writer = pandas.ExcelWriter("MyData.xlsx", engine='xlsxwriter') 
List = [Data , ByBrand] 
for i in List: 
     i.to_excel(writer, sheet_name= i) 
writer.save() 

私は、問題はそれがエラーを作成するなど、であるため、シート名フィールドは文字列でなければならないということだと思います。しかし、sheet_name = "i"を置くと、Dataからのデータで "i"というシートが1つだけ作成されますが、ByBrandには反復されません。また、シートが対応するデータフレームに名前が付けられていない場合、Excelファイルは悪夢になるので、番号付きシートなどの提案はしないでください。

ありがとうございました。このウェブサイトは、私のコーディングへの旅に非常に役立ちました。

-Stephen

答えて

1

それは周りに他の方法よりも値Dataに文字列'Data'から行くことが容易です。あなたは、その文字列の名前です'Data'変数に関連する値にアクセスするためにlocals()['Data']を使用することができます。

import pandas as pd 

writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter') 
seq = ['Data', 'ByBrand'] 
for name in seq: 
    df = locals()[name] 
    df.to_excel(writer, sheet_name=name) 
writer.save() 

locals()は、現在のスコープのローカル変数を含む読み取り専用の辞書を返します。 globals()は、現在のスコープのグローバル変数を含む辞書を返します。 (DataByBrandがグローバルネームスペースではなく、ローカル名前空間で定義されている場合したがって、globals()代わりにlocals()使用。)


別の選択肢は、辞書内のデータフレームを収集することです。代わりに、各データフレームのための変数を作成するのではなく、1つの辞書を作り、そしてキーはシート名で、値はデータフレームも聞かせて:

import pandas as pd 

dfs = dict() 
dfs['Data'] = ... 
dfs['ByBrand'] = ... 

writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter') 
for name, df in dfs.items(): 
    df.to_excel(writer, sheet_name=name) 
writer.save() 

私はそれがlocals()またはglobals()のようなイントロスペクションツールを必要としないので、これは望ましいと思います。この第2のアプローチでは、ディクテーションを使用することを意図した方法を使用しています。キーを値にマッピングします。

関連する問題