« * 《参考資料》深澤諭史弁護士のTLで見た「日本の警察は、今年3月から防犯カメラやSNSの画像を顔認証システムで照合していた 」に「画像提供する民間側が損害賠償のリスク背負ってないからじゃねーかな」というツイート | トップページ | * pythonのenumerate関数の開始数値の指定と,format関数での数値のゼロ埋め »

2020年9月22日 (火)

* 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 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']) ((, , ), (, , ), (, , )) 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]:

|

« * 《参考資料》深澤諭史弁護士のTLで見た「日本の警察は、今年3月から防犯カメラやSNSの画像を顔認証システムで照合していた 」に「画像提供する民間側が損害賠償のリスク背負ってないからじゃねーかな」というツイート | トップページ | * pythonのenumerate関数の開始数値の指定と,format関数での数値のゼロ埋め »