0
1

More than 3 years have passed since last update.

Python PandasライブラリでExcelの表題「件名」列に「中計」と書いてある行番号を全て探す

Last updated at Posted at 2020-02-09

# はじめに

 Python PandasライブラリでExcelの表題「件名」列に「中計」と書いてある行番号を全て探す場合のメモを書き留めておきます。

結論

pandas.DataFrameオブジェクト.reset_index().query( '件名 == "中計"' ).index
と記述します。これで表題「件名」列に「中計」と書いてある行番号の配列を得ることができます。具体的には以下のように記述します。

具体例
list中計行 = list( df請求一覧.reset_index().query( '件名 == "中計"' ).index )

前提条件

  1. Excelシートはベースパス請求対象フォルダ年月フォルダ出力フォルダ名内のExcelブック請求一覧ファイル名内のシートとします
  2. 表題「件名」列に「中計」と書いてあるExcelシートをPandasのDataFramedf請求一覧に格納します

していること

  1. reset_index()df請求一覧の行番号に当たるインデックスを初期化します
  2. query()メソッドで検索条件として'件名 == "中計"'を指定します
  3. このquery()メソッドのindexプロパティを得ます。これが件名」列に「中計」の行番号です
  4. これらの行番号が複数あるので、list()関数で配列化し、list中計行配列に格納します

実装例

 念のためにご参考までに、上記の具体例を使う実装例を示します。

マージクするためのクラスたち

Excelシートの表題行(ヘッダ行)以下をPandasのDataFrameに格納指定ます

merge.py
import pandas as pd
import os
import setting

class Read:
  def 請求一覧( 入力内容, listメッセージ ):
    請求一覧パス = \
              os.path.join( \
                入力内容.get( 'ベースパス' ), \
                  入力内容.get( '請求対象フォルダ名' ), \
                    入力内容.get( '年月フォルダ名' ), \
                      入力内容.get( '出力フォルダ名' ), \
                        入力内容.get( '請求一覧ファイル名' ) \
              )
    book請求一覧 = pd.ExcelFile( 請求一覧パス )
    df請求一覧 = book請求一覧.parse( \
                    book請求一覧.sheet_names[0], \
                    header=setting.Info.請求明細.get( 'ヘッダ行' ) - 1 \
                  )
    # 省略
    return( df請求一覧 )

class 請求一覧:
  def 中計行をさがす( df請求一覧 ):
    list中計行 = []
    list中計行 = list( df請求一覧.reset_index().query( '件名 == "中計"' ).index )
    print( "■list中計行 = ", list中計行 )

利用するクラス

PythonのWebフレームワークresponderのとあるクラスのPOSTメソッドで利用しています

run.py
import responder
import merge

# 省略

@api.route("/top")
class top:
  # 省略
  async def on_post( self, req, resp ):
    data = await req.media()
    # 省略
    merge.請求一覧.中計行をさがす( merge.Read.請求一覧( 入力内容, listメッセージ ) )
    # 省略
    return
# 省略

もろもろ設定クラス

setting.py
class Info
    #省略
    パス = {
        "ベース": r"\\hoge\\foo\なんとか\かんとか"
        ,
        "請求対象フォルダ名": "請求対象"
        ,
        "年月フォルダ名": "yyyyMM分"
        ,
        "出力フォルダ名": "請求一覧"
        ,
        "請求一覧ファイル名": "なんとかかんとか.xlsx"
        ,
        # 省略
    }

    # 省略

    請求明細 = {
        "ヘッダ行": 9 ,
        "データ開始列": 1 ,
    }
0
1
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
0
1