* 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ファイルを指定して,ワークシートの追加が出来るとのことです。同じワークシートに追加する方法は,別のリンクで紹介されているようです。
PythonでExcelファイル(xlsx)を読み書きするopenpyxlの使い方 | note.nkmk.me https://note.nkmk.me/python-openpyxl-usage/
上記のページをみながら,ipythonでいろいろ試してみました。
In [22]: import openpyxl
...: import pprintIn [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)
NoneIn [31]: cell = sheet.cell(row=2, column=1)
In [32]: print(cell.value)
oneIn [33]: pprint.pprint(sheet['A2:C4'])
*1In [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: