前提
excelで人事評価一覧表をpythonを使って作成しています。
既存の従業員一覧表ファイル(excel)に社員番号、社員名、従業員区分などが記載されており、従業員区分が「社員」のものだけを抽出し、新規作成した人事評価一覧表に「社員」で該当した者の社員名と社員番号を転記する作業を行っています。
従業員一覧表の範囲はmax_row関数を使って最大行数を取得しているのですが、表は232行までしかないにも関わらず、max_row=235と出てしまいます。
今回、セルに社員と書かれているかどうかで分岐をしているのでmax_rowの値が違うとしても影響はないと考えていたのですが、233行目から” if df_shain.iloc[i,4] == '社員':”の箇所で下記のようなエラーが出てしまいます。(エラー文では228行目となっていますが、ヘッダーがあるため実際は233行目に該当します。)
実際のExcelをお見せできないため、非常に分かりづらく申し訳ありませんが、233行目からはただ空白のセルが続いているだけです。
表の途中にも従業員区分が空白の箇所はあるのですが、そこでエラーを吐くことがないため原因が分かりません。
憶測でご回答いただくことになってしまうかと思いますが、どのような要因で下記のエラーが出てしまうことがあるのかご教示お願い致します。
発生している問題・エラーメッセージ
index 228 is out of bounds for axis 0 with size 228 File "C:\Users\ko\Documents\python\jinjitest\test.py", line 34, in <module> if df_shain.iloc[i,4] == '社員': ~~~~~~~~~~~~~^^^^^ IndexError: index 228 is out of bounds for axis 0 with size 228
該当のソースコード
python
1import pandas as pd 2import openpyxl 3import glob 4import warnings 5import os 6 7warnings.filterwarnings('ignore') 8 9#人事評価一覧の作成 10df_new = pd.DataFrame() 11df_new.to_excel('新方式一覧表_test.xlsx', index=False) 12wb_new = openpyxl.load_workbook('新方式一覧表_test.xlsx',data_only=True) 13ws_new = wb_new.active 14 15#従業員一覧表の読み込み 16shain_path =glob.glob( './data/list/*.xlsx') 17for shain in shain_path: 18 wb_shain = openpyxl.load_workbook(shain, data_only=True) 19 ws_shain = wb_shain.active 20df_shain = pd.read_excel(shain,header=3) 21#表の最大範囲を指定 22max_r = range(ws_shain.max_row-5) 23max_c = range(ws_shain.max_column) 24 25#社員を抽出 26i=0 27x=2 28for i in max_r: 29 data = {} 30 if df_shain.iloc[i,4] == '社員': 31 #社員名抽出 32 menb = str(df_shain.iloc[i,1]) 33 #社員番号抽出 34 code = df_shain.iloc[i,0] 35 36 #人事評価一覧表に転記 37 ws_new.cell(row=x,column=2).value = menb 38 ws_new.cell(row=x,column=1).value = code 39 ws_new.cell(row=x,column=3).value = '社員' 40 x = x + 1 41 42wb_new.save('新方式一覧表_test.xlsx')
試したこと
エラー文で検索してみたり、Excelのテーブル範囲を再設定などしてみましたが、解決しませんでした。
また、表を別シートにコピペし、同じコードで実行したところ、max_rowは正常な値になったのですが、233行目は同じくエラーになってしまいます。
テーブルの外側はエラーになってしまうような仕様なのかと考えていますが、かなり不便です。
回答2件
あなたの回答
tips
プレビュー