LoginSignup
6
5

More than 3 years have passed since last update.

(Python)複数のExcelファイル内における特定シート内特定列のデータを一括抽出し、各列内データを1行に納めるには

Last updated at Posted at 2020-06-29

背景

複数の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',''))
  • 日付データが含まれる場合

    • 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日'))

以上になります。(もっと簡単な方法があるよ、というのがあれば、ぜひ、コメントください)

関連記事

  1. Pythonでフォルダ内のファイルリストを取得する
  2. エクセル日付の「数値」を python の datetime に変換する
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5