* pythonの「pandasでExcelファイル(xlsx, xls)の書き込み(to_excel)」

:CATEGORIES: python

pandasでExcelファイル(xlsx, xls)の書き込み(to_excel) | note.nkmk.me https://note.nkmk.me/python-pandas-to-excel/

 上記のページを参考に次の2つのパッケージをpipでインストールしたところすぐに使えました。

pip install xlwt
pip install openpyxl

 「xlwtは.xlsファイル(Excel2003までのフォーマット)の書き込み、openpyxlは.xlsx(Excel2007以降のフォーマット)の書き込みに使われる。」という説明があります。

 シート名の指定や,インデックス名,カラム名のなしを指定できるとのことです。


引数sheet_nameにはシート名を指定する。省略するとSheet1という名前になる。

df.to_excel('data/dst/pandas_to_excel.xlsx', sheet_name='new_sheet_name')
source: pandas_to_excel.py
index(行名), columns(列名)を書き出す必要がない場合は、引数index, columnsをFalseとする。

df.to_excel('data/dst/pandas_to_excel_no_index_header.xlsx', index=False, header=False)

[source:]pandasでExcelファイル(xlsx, xls)の書き込み(to_excel) | note.nkmk.me https://note.nkmk.me/python-pandas-to-excel/


ExcelWriterオブジェクトのbook属性にopenpyxlで読み込んだWorkbookオブジェクトを指定すると、既存のExcelファイルの新たなシートとしてpandas.DataFrameを追加することができる。

openpyxlを使った処理なので.xlsxファイルのみが対象。

path = 'data/dst/pandas_to_excel.xlsx'

with pd.ExcelWriter(path) as writer:
writer.book = openpyxl.load_workbook(path)
df.to_excel(writer, sheet_name='new_sheet1')
df2.to_excel(writer, sheet_name='new_sheet2')

[source:]pandasでExcelファイル(xlsx, xls)の書き込み(to_excel) | note.nkmk.me https://note.nkmk.me/python-pandas-to-excel/

 既存のExcelファイルを指定して,ワークシートの追加が出来るとのことです。同じワークシートに追加する方法は,別のリンクで紹介されているようです。

PythonExcelファイル(xlsx)を読み書きするopenpyxlの使い方 | note.nkmk.me https://note.nkmk.me/python-openpyxl-usage/

 上記のページをみながら,ipythonでいろいろ試してみました。


In [22]: import openpyxl
...: import pprint

In [23]: wb = openpyxl.load_workbook('sample.xlsx')

In [24]: print(tpye(wb))

                                                                                                                                                    • -

NameError Traceback (most recent call last)
in

        • > 1 print(tpye(wb))

NameError: name 'tpye' is not defined

In [25]: print(type(wb))

In [26]: print(wb.sheetnames)
['Sheet1']

In [27]: sheet = wb['sheet1']

                                                                                                                                                    • -

KeyError Traceback (most recent call last)
in

        • > 1 sheet = wb['sheet1']

~/anaconda3/envs/py37_env/lib/python3.7/site-packages/openpyxl/workbook/workbook.py in __getitem__(self, key)
271 if sheet.title == key:
272 return sheet

    • > 273 raise KeyError("Worksheet {0} does not exist.".format(key))

274
275 def __delitem__(self, key):

KeyError: 'Worksheet sheet1 does not exist.'

In [28]: sheet = wb['Sheet1']

In [29]: cell = sheet['A1']

In [30]: print(cell.value)
None

In [31]: cell = sheet.cell(row=2, column=1)

In [32]: print(cell.value)
one

In [33]: pprint.pprint(sheet['A2:C4'])
*1

In [34]: sheet['E1'] = 'new'

In [35]: sheet['E2'] = 'new'

In [36]: sheet['F2'] = 'new'

In [37]: def write_list_2d(sheet, l_2d, start_row, start_col):
...: for y, row in enumerate(l_2d):
...: for x, cell in enumerate(row):
...: sheet.cell(row=start_row + y,
...: column=start_col + x,
...: value=l_2d[y][x])
...:
...: l_2d = [['four', 41, 42, 43], ['five', 51, 52, 53]]
...:
...: write_list_2d(sheet, l_2d, 5, 1)

In [38]: wb.save('sample.xlsx')

In [39]: write_list_2d(sheet, l_2d, 7, 1)

In [40]: wb.save('sample.xlsx')

In [41]: write_list_2d(sheet, l_2d, 13, 1)

In [42]: wb.save('sample.xlsx')

In [43]:

*1:, , ), (, , ), (, ,