web-dev-qa-db-ja.com

Pandasを使用して複数のヘッダーを持つExcelシートを読む

次のような複数のヘッダーを持つExcelシートがあります。

_________________________________________________________________________
____|_____|        Header1    |        Header2     |        Header3      |
ColX|ColY |ColA|ColB|ColC|ColD||ColD|ColE|ColF|ColG||ColH|ColI|ColJ|ColDK|
1   | ds  | 5  | 6  |9   |10  | .......................................
2   | dh  |  ..........................................................
3   | ge  |  ..........................................................
4   | ew  |  ..........................................................
5   | er  |  ..........................................................

ここで、最初の2つの列にはヘッダーがありませんが、他の列にはHeader1、Header2、Header3などのヘッダーがあることがわかります。したがって、このシートを読み、同様の構造を持つ他のシートとマージしたいと思います。

最初の列「ColX」にマージしたいです。今私はこれをやっています:

import pandas as pd

totalMergedSheet = pd.DataFrame([1,2,3,4,5], columns=['ColX'])
file = pd.ExcelFile('ExcelFile.xlsx')
for i in range (1, len(file.sheet_names)):
    df1 = file.parse(file.sheet_names[i-1])
    df2 = file.parse(file.sheet_names[i])
    newMergedSheet = pd.merge(df1, df2, on='ColX')
    totalMergedSheet = pd.merge(totalMergedSheet, newMergedSheet, on='ColX')

しかし、どちらの列も正しく読み取れないのがわかりません。また、思い通りに結果を返さないと思います。したがって、結果のフレームは次のようになります。

________________________________________________________________________________________________________
____|_____|        Header1    |        Header2     |        Header3      |        Header4     |        Header5      |
ColX|ColY |ColA|ColB|ColC|ColD||ColD|ColE|ColF|ColG||ColH|ColI|ColJ|ColK| ColL|ColM|ColN|ColO||ColP|ColQ|ColR|ColS|
1   | ds  | 5  | 6  |9   |10  | ..................................................................................
2   | dh  |  ...................................................................................
3   | ge  |  ....................................................................................
4   | ew  |  ...................................................................................
5   | er  |  ......................................................................................

提案をお願いします。ありがとう。

9
muazfaiz

Pandasには既にExcelスプレッドシート全体を読み込む機能があるため、各シートを手動で解析/マージする必要はありません。ご覧ください pandas.read_Excel() 。 Excelファイルを1行で読み取るだけでなく、問題の解決に役立つオプションも提供します。

サブカラムがあるので、探しているのは MultiIndexing です。デフォルトでは、pandasは一番上の行を唯一のヘッダー行として読み取ります。行数を示すheader引数をpandas.read_Excel()に渡すことができます。ヘッダーとして使用します。特定のケースでは、header=[0, 1]、最初の2行を示します。複数のシートがある場合もあるので、sheetname=Noneも同様です(これにより、すべてのシートを調べるように指示されます)。コマンドは次のようになります。

df_dict = pandas.read_Excel('ExcelFile.xlsx', header=[0, 1], sheetname=None)

これは、キーがシート名で、値が各シートのデータフレームである辞書を返します。すべてを1つのDataFrameにまとめるには、pandas.concatを使用します。

df = pandas.concat(df_dict.values(), axis=0)
17
beeftendon