よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

PandasでExcelファイルに書き込む

今回は、Pandasを使ってExcelシートに書き込みをしたいと思います。

参考

pandas公式 pandas.DataFrame to_excel

pandasでExcelファイル(xlsx, xls)の書き込み(to_excel) | note.nkmk.me

作業環境

Windows10
Anaconda
Jupyter Notebook
Python3.7 (Pandasインストール済み)

スマホ(Android ソニー)
Qpython (python3 と pandasが動く)


目次


準備



Pandas.DataFrameをExcelシートに書き込むときに to_excelを使います。
xlwt というExcel書込み用と、Excel操作全般につかうopenpyxl モジュールが必要なので先にインストールします。



xlwtopenpyxl をインストールします。

pip install xlwt
pip install openpyxl

Anacondaなら

conda install xlwt
conda install openpyxl

またはAnaconda Navigator のEnvironmentsからインストールします。

インストール後に確認で import openpyxl してエラーがでなければOK。
だがしかし、importしなくても問題なく動くw
よくわかりませんが、エンジンが云々と公式に書かれている。そこで使っているらしい。


注意点


Excelブックを開いたまま書込みのPythonスクリプト実行すると

PermissionError: Errno 13 Permission denied:

と権限のエラーが出ます。

書込み確認後は、毎度ブックを閉じてください。

「おかしいな・・・またエラーか・・・」

と何度もやらかさないように(笑)


Pandas.to_excelで書き込み

カレントディレクトリの確認

今から書き込むExcelファイルは新規作成されて、カレントディレクトリに保存されます。

# カレントディレクトリの確認
import os

print(os.getcwd())



DataFrameに値を入れる

import pandas as pd

df = pd.DataFrame([["あ", "い", "う", "え", "お"],
                   ["か", "き", "く", "け", "こ"],
                   ["さ", "し", "す", "せ", "そ"]],
                  index=['あ行', 'か行', 'さ行'], columns=['a', 'i', 'u', 'e', 'o'])
                

print(df)
    a  i  u  e  o
あ行  あ  い  う  え  お
か行  か  き  く  け  こ
さ行  さ  し  す  せ  そ



to_excel で書き込む

# Excelの保存ファイル名
file_name = 'pandas_to_excel.xlsx'

# 書込み
df.to_excel(file_name, sheet_name='あ行-さ行')

カレントディレクトリに「 pandas_to_excel.xlsx 」という名前のExcelファイルが新規作成されていると思います。
確認してましょう。

f:id:chayarokurokuro:20190823002805j:plain

f:id:chayarokurokuro:20190823002824j:plain

インデックスとヘッダーの周りの枠は自動で付いています。
pandas.to_excelの機能なのか分かりません。

確認が済んだら、次の書込みでエラーを出さないように
くどいようですが Excelのブックを閉じましょう!!

index と header をFalse 、sheet_name を消して書き込む

df.to_excel(file_name, index=False, header=False)

index と columns で指定した先頭の項目が消えて、上書き保存されました。
さらに、シート名もデフォルトの「Sheet1」に戻っています。

f:id:chayarokurokuro:20190823004522j:plain



複数のシートに書き込む

ここでは pandas.ExcelWriter を使っています。
参考

pandas公式 pandas.ExcelWriter

一番最初に用意した変数dfを「シート1」と「シート2」に書き込んでみます。

with pd.ExcelWriter(file_name) as writer:
    df.to_excel(writer, sheet_name='シート1')
    df.to_excel(writer, sheet_name='シート2')

異なるDataFrameを用意すれば異なる内容を複数のシートに書き込めます。


ブックに新規シートを追記



今までのは上書き保存でしたが、ここからは追記です。

別の内容のDataFrameを準備し、「シート3」に新規シートで書き込み、ブックに追加してみます。

modeaに指定して追記モード で新規シートを追記しています。

# 新規データ 
df_TaNa = pd.DataFrame([["た", "ち", "つ", "て", "と"],
                   ["な", "に", "ぬ", "ね", "の"]],
                  index=['た行', 'な行'], columns=['a', 'i', 'u', 'e', 'o'])

# 追記モードで新規データを書き込み
with pd.ExcelWriter(file_name, mode = 'a') as writer:
    df_TaNa.to_excel(writer, sheet_name='シート3')



全シート指定 sheet_name = None して read_excel で読み込む

df = pd.read_excel(file_name,sheet_name = None)
print(df)
OrderedDict([('シート1',   Unnamed: 0  a  i  u  e  o
0         あ行  あ  い  う  え  お
1         か行  か  き  く  け  こ
2         さ行  さ  し  す  せ  そ), ('シート2',   Unnamed: 0  a  i  u  e  o
0         あ行  あ  い  う  え  お
1         か行  か  き  く  け  こ
2         さ行  さ  し  す  せ  そ), ('シート3',   Unnamed: 0  a  i  u  e  o
0         た行  た  ち  つ  て  と
1         な行  な  に  ぬ  ね  の), ('シート31',   Unnamed: 0  a  i  u  e  o
0         た行  た  ち  つ  て  と
1         な行  な  に  ぬ  ね  の), ('シート32',   Unnamed: 0  a  i  u  e  o
0         た行  た  ち  つ  て  と
1         な行  な  に  ぬ  ね  の), ('シート33',   Unnamed: 0  a  i  u  e  o
0         た行  た  ち  つ  て  と
1         な行  な  に  ぬ  ね  の)])

↑ はJupyter Notebookの実行結果です。

追記モードで書いたコードセルを実行する度に、同じ内容のしーとがブックに追記されていきます。
追加されるシート名は 「シート3」→ 「シート31」 → 「シート32」と自動で割り振られました。

10回超えると「シート310」「シート311」のように桁が上がりました。



Qpythonでできるか確認

Qpythonでpandasがインストールされている状態からスタートしますよ。

スタート画面のQPYPIから

pip install xlrd
pip install xlwt
pip install openpyxl

をインストールします。

Qpythonのエディタでコード書いて
↓↓↓

f:id:chayarokurokuro:20190823013456j:plain

実行
↓↓↓

f:id:chayarokurokuro:20190823013554j:plain

↑↑↑↑
DataFrameの標準出力させたところ。

f:id:chayarokurokuro:20190823013752j:plain

スマホExcelアプリで見た画面。
書き込み成功。

書き込みしたファイルはデフォルトでqpythonフォルダに保存される。

今回はここまで。
ありがとうございました。