多くの python pandas データフレームを 1 つの excel ワークシートに置く
質問
異なるワークシートである限り、多くのpandasデータフレームをExcelワークブックに追加することは非常に簡単です。しかし、pandas組み込みのdf.to_excel機能を使用したい場合、1つのワークシートに多くのデータフレームを取得することはやや困難です。
# Creating Excel Writer Object from Pandas
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')
workbook=writer.book
worksheet=workbook.add_worksheet('Validation')
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
上記のコードは動作しません。以下のようなエラーが発生します。
Sheetname 'Validation', with case ignored, is already in use.
さて、十分に実験した結果、うまくいく方法が見つかりました。
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter') # Creating Excel Writer Object from Pandas
workbook=writer.book
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
これはうまくいくでしょう。それで、stackoverflowにこの質問を投稿する目的は2つあります。まず、私は、彼/彼女がExcelで多くのデータフレームを単一のワークシートに入れようとしている場合、これが誰かの助けになることを願っています。
第二に、誰かがコードのこれらの2つのブロックの違いを理解するのを助けることができますか?最初のコードのブロックが事前に "Validation" と呼ばれるワークシートを作成したのに対して、2番目のコードがそうでないことを除いて、それらはほとんど同じであるように私には見えます。私はその部分を取得します。
私が理解していないのは、なぜ違うのか、ということです。たとえ私が事前にワークシートを作成しなくても、この行、最後の行の直前の行はそうです。
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
はとにかくワークシートを作成します。その結果、コードの最後の行に到達するまでに、ワークシート "Validation" はコードの2番目のブロックですでに同様に作成されています。 つまり、私の質問は基本的に、なぜ 2 番目のコードのブロックは動作し、1 番目のコードは動作しないのでしょうか?
組み込みのdf.to_excel機能を使用して、多くのデータフレームをエクセルに入れる他の方法があれば、それも共有してください!
どのように解決するのですか?
あらかじめワークシートを作成しておくには、作成したシートを
sheets
のディクショナリーを作成します。
writer.sheets['Validation'] = worksheet
元のコードを使って
# Creating Excel Writer Object from Pandas
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')
workbook=writer.book
worksheet=workbook.add_worksheet('Validation')
writer.sheets['Validation'] = worksheet
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0)
説明
pandasの関数である
to_excel
を見ると、これはライターの
write_cells
関数を使用します。
excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol)
ということで
write_cells
の関数を見ると
xlsxwriter
:
def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0):
# Write the frame cells using xlsxwriter.
sheet_name = self._get_sheet_name(sheet_name)
if sheet_name in self.sheets:
wks = self.sheets[sheet_name]
else:
wks = self.book.add_worksheet(sheet_name)
self.sheets[sheet_name] = wks
ここでは
sheet_name
で
self.sheets
であるため、そこにも追加する必要があります。
関連
-
[解決済み] 一行ずつ追加してPandas Dataframeを作成する
-
[解決済み] 複数のcsvファイルをpandasにインポートし、1つのDataFrameに連結する。
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] PyQtアプリケーションのスレッド化。QtスレッドとPythonスレッドのどちらを使うか?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PythonでのAWS Lambdaのインポートモジュールエラー
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] if 節の終了方法
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例