###背景
複数のExcelファイルの特定シート内の特定列のデータを一括抽出し、それぞれ1行に納めたい際に、pythonを用いて、さくっと処理することができたので、備忘録として、整理することにしました。
###1.複数のExcelファイルを読み込むには
- 今回は、前提として、約150個のファイルを同一フォルダに格納しています。
- 最初に、フォルダ内のファイル一覧を取得します。
import glob
files=glob.glob(r'/レビュー結果分析用/*.xlsx')
- 次に、pandas.read_excel()を使用して、ファイル一覧から一つづつファイル名を取得して、Excelファイルの特定シートを読み込みます。
- さらに、valuesを用いて、特定シート内の特定列のデータを抽出します。例では、特定列は10項目(左から)になります。
import pandas as pd
for file in files:
df = pd.read_excel(file, sheet_name='指摘事項一覧')
for row in df.values:
# 10列目のデータを抽出
s_data = str(row[9]).strip().rstrip()
###2.後処理
-
取得したデータを1行にまとめたい場合
- 取得した列データ内を1行に納めたい場合には、データ内の改行コードを取り除きます。これは、データ分析においては、よくあるケースと思われますので、載せておきます。
print(s_data.replace('\n',''))
- 取得した列データ内を1行に納めたい場合には、データ内の改行コードを取り除きます。これは、データ分析においては、よくあるケースと思われますので、載せておきます。
-
日付データが含まれる場合
- pythonでExcelファイルを読み込むと、Excelファイル上で表示されていた日付が、41496 などの 5桁の数値に変換されてしまう、といった事象に出会すことがあるかと思います。これは、Excelでの日付は 1900年1月1日を起点 (1 日目) として、そこから日数を加算した数値で日付データを保持している、というのが原因のようです。(関連記事2参照)。
- そこで、以下のような関数を作成して、変換する必要がありますので、実際に動いたコードを記載しておきます。
def excel_date(num):
from datetime import datetime, timedelta
return(datetime(1899, 12, 30) + timedelta(days=num))
print(pd.to_datetime(excel_date(row[11]), format='%Y年%m月%d日'))
以上になります。(もっと簡単な方法があるよ、というのがあれば、ぜひ、コメントください)
##関連記事