目的
エクセルに存在する特定の表データのみを抽出してCSVファイルに保存する
前提条件
・抽出したい表の項目は以下の5項目(列)
名前、体力、攻撃力、防御力、必殺技
・エクセルの1枚目のシートに対象の表が存在
・シートのA列に先頭の項目”名前”が存在
・シートの一番上にある表のみを抽出
import pandas as pd
import openpyxl
# データの項目は以下の5項目であることとシートのA列に"名前"が存在することが前提
# 名前、体力、攻撃力、防御力、必殺技
# データが存在するファイルを読み込む
wb = openpyxl.load_workbook("book.xlsx")
# データが存在するシートを読み込む ※一番のシートにデータが存在することを想定
ws = wb.worksheets[0]
# 行番号を検索により取得する
start_row = ''
for i, row in enumerate(ws.iter_rows(min_row=1), start=0):
# A列(pythonでは0列目)を対象に、キーワード探索して、その行番号を取得する
if row[0].value == '名前': # キーワードをシートの上の行(1行目)から探索
start_row = i+1
break # forループを抜ける
# エクセルシート内にある最終行を取得する
end_row = ws.max_row
# 表範囲を配列で取得する
data_rows = []
for rows in ws.iter_rows(min_row=start_row, min_col=1, #"名前は1列目にあるのでmin_col=1"
max_row=end_row, max_col=5):#"データは6個なのでmax_col=6"
data_cols = []
for cell in rows:
data_cols.append(cell.value)
data_rows.append(data_cols)
# pandasデータフレーム形式へ変換
df = pd.DataFrame(data_rows[1:], columns=data_rows[0])
# 行名を”名前”に置換する。
df.set_index("名前",inplace=True)
# csvファイルに出力
df.to_csv('df_con.csv', index=True, encoding='cp932')