dataframeに
numpyの画像データが格納されている場合の処理で,
画像付きのexcel_fileを出力したいと考えております。
具体的には
事前設定として,何かしらのexcel_fileを用意し,以下のコードを実装し,
そのエクセルファイルに画像を入れる作業をしたいと考えています。
作りたいエクセルファイルの想像
id | img |
---|---|
1 | |
2 |
具体的には,以下のような実装です。
python
1import pandas as pd 2import numpy as np 3import matplotlib.pyplot as plt 4from PIL import Image as Image_pil 5import openpyxl 6from openpyxl.drawing.image import Image as Image_xl 7 8 9k=[[[0,0,0],[200,200,200],[0,0,0],[200,200,200]], 10 [[200,200,200],[0,0,0],[200,200,200],[0,0,0]], 11 [[0,0,0],[200,200,200],[0,0,0],[200,200,200]], 12 [[200,200,200],[0,0,0],[200,200,200],[0,0,0]]] 13k=np.array(k) 14 15# kの中身確認 16# Image_pil.fromarray((k).astype(np.uint8)) 17# plt.imshow(k) 18 19# df 作成 20lst=[] 21for i in range(10): 22 lst.append([k]) 23 24df=pd.DataFrame(lst,columns=['img']) 25 26#画像挿入するエクセルファイルを指定 27t=!pwd 28out_excel_path=t[0]+"???.xlsx" 29wb = openpyxl.load_workbook(out_excel_path) 30ws = wb["Sheet1"] 31 32#挿入する画像を指定 33for index, row in df.iterrows(): 34 img_pil = Image_pil.fromarray((row[0]).astype(np.uint8)) 35 img_xl = Image_xl(img_pil) 36 #画像挿入 37 ws.add_image(img_xl, 'E'+str(index+1)) 38 #保存 39 wb.save(out_excel_path) 40
しかし,上記を実装すると
terminal
1--------------------------------------------------------------------------- 2AttributeError Traceback (most recent call last) 3<ipython-input-21-0914d2352001> in <module> 4 38 ws.add_image(img_xl, 'E'+str(index+1)) 5 39 #保存 6---> 40 wb.save(out_excel_path) 7 8/usr/local/lib/python3.9/site-packages/openpyxl/workbook/workbook.py in save(self, filename) 9 405 if self.write_only and not self.worksheets: 10 406 self.create_sheet() 11--> 407 save_workbook(self, filename) 12 408 13 409 14 15/usr/local/lib/python3.9/site-packages/openpyxl/writer/excel.py in save_workbook(workbook, filename) 16 291 archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True) 17 292 writer = ExcelWriter(workbook, archive) 18--> 293 writer.save() 19 294 return True 20 295 21 22/usr/local/lib/python3.9/site-packages/openpyxl/writer/excel.py in save(self) 23 273 def save(self): 24 274 """Write data into the archive.""" 25--> 275 self.write_data() 26 276 self._archive.close() 27 277 28 29/usr/local/lib/python3.9/site-packages/openpyxl/writer/excel.py in write_data(self) 30 75 self._write_worksheets() 31 76 self._write_chartsheets() 32---> 77 self._write_images() 33 78 self._write_charts() 34 79 35 36/usr/local/lib/python3.9/site-packages/openpyxl/writer/excel.py in _write_images(self) 37 114 # delegate to object 38 115 for img in self._images: 39--> 116 self._archive.writestr(img.path[1:], img._data()) 40 117 41 118 42 43/usr/local/lib/python3.9/site-packages/openpyxl/drawing/image.py in _data(self) 44 49 # don't convert these file formats 45 50 if self.format in ['gif', 'jpeg', 'png']: 46---> 51 img.fp.seek(0) 47 52 fp = img.fp 48 53 else: 49 50/usr/local/lib/python3.9/site-packages/PIL/Image.py in __getattr__(self, name) 51 544 ) 52 545 return self._category 53--> 546 raise AttributeError(name) 54 547 55 548 @property 56 57AttributeError: fp
というバグが出たり,excelファイルが壊れたりしてしてしまいます。
どのようにこのバグを解消したら良いか不明のためご教授していただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/27 11:30