Python初学者です。
エクセルより特定列をコピーしてリスト化し、そのリストの先頭とNoneを含む要素を削除して成形を行いました。
その後、このリストを20個に分割して別のエクセルファイルの各シートへ貼り付けようという目的でプログラムを書いておりました。
テストとして、シート1に分割したリストの[0]番目を張り付けようとしたところ、以下のようなエラーメッセージが出てきました。
(エラーメッセージ追記)
Traceback (most recent call last):
File "\array_split.py", line 26, in <module>
ws2.append(row)
File "\worksheet.py", line 676, in append
self._invalid_row(iterable)
File "\worksheet.py", line 812, in _invalid_row
raise TypeError('Value must be a list, tuple, range or generator, or a dict. Supplied value is {0}'.format(
TypeError: Value must be a list, tuple, range or generator, or a dict. Supplied value is <class 'numpy.float64'>
プログラムは以下の通りです。
不足していることが多々あるかもしれませんが教えていただけると幸いです。よろしくお願いいたします。
python
1##モジュールインポート 2import openpyxl 3import numpy as np 4 5##データ読み込み 6wb1 = openpyxl.load_workbook('\\test_result.xlsx') 7ws1 = wb1.worksheets[0] 8 9 10##H列のデータをリスト化し、valuesに格納 11values = [ cell.value for cell in ws1['H'] ] 12 13##先頭のセルとNoneを消した上でvaluesのリストを20個に分割 14values.pop(0) 15 16while None in values: 17 values.remove(None) 18 19result = list(np.array_split(values, 20)) 20 21##別のワークシートを準備して、分割したresultの最初のリストをSheet1に張り付ける 22wb2 = openpyxl.load_workbook('\\Amino_acid.xlsx') 23ws2 = wb2.worksheets[0] 24 25for row in result[0]: 26 ws2.append(row) 27 28##保存 29wb2.save("final.xlsx")
追記
print(result)
とし、実際にどのようなデータが出てくるか確認すると
[array([10.46, 8.98, 4.46, 11.69, 14.41, 10.92, 23.1 , 54.92, 32.93]), array([ 34.17, 36.08, 36.94, 59.15, 60.2 , 60.16, 113.7 , 113.3 , 115.47]), array([1111. , 1111. , 1111. , 13.78, 14.69, 12.8 , 26.19,
30.23, 32.43]), ....
といった形で出力され、
print(result[0])
とすると
[10.46 8.98 4.46 11.69 14.41 10.92 23.1 54.92 32.93]
となります。
初学者ゆえ理解できていない部分が多いのですが、この場合だとresult[0]で出てきたデータはリストになっていないという事でしょうか・・・

回答1件
あなたの回答
tips
プレビュー