Hiromi1623
@Hiromi1623

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

2つのExcelファイルにおける差分プログラム

Q&A

Closed

解決したいこと

pythonで2つのExcelファイルを読み込んで差分を出力するプログラムを作成しました。
このプログラムを作成に使用したPCでは実行されましたが、別のPCで使用したところ、うまく実行できなくなってしまいました。
上手く実行できるように修正したいです。

発生している問題・エラー

compare_excel_files(file_path1, file_path2)

"compare_excel_files"が別のPCでは認識されておらず(コードの色が半透明になっている)関数が実行されていないと考えています 

該当するソースコード

import pandas as pd

def compare_excel_files(file_path1, file_path2):
    # シート名を指定
    sheet_name = 'シート名'

    # 出力データを格納するリスト
    output_data = []

    # Excelファイルを読み込む
    df1 = pd.read_excel(file_path1, sheet_name=sheet_name)
    df2 = pd.read_excel(file_path2, sheet_name=sheet_name)

    # データの差分を抽出
    diff_data = df2[df2 != df1]
    diff_data.dropna(how='all', inplace=True)

    # 差分がある場合は出力データに追加
    if not diff_data.empty:
        # 差分データを整形して出力データに追加
        for row_index, row in diff_data.iterrows():
            for col_name, cell_value in row.iteritems():
                if pd.notnull(cell_value):
                    # シート名、セル、Excel1ファイルの該当する内容、Excel2ファイルの該当する内容を出力データに追加
                    output_data.append([sheet_name, f"{col_name}{row_index}", df1.loc[row_index, col_name], df2.loc[row_index, col_name]])

    # 出力データをDataFrameに変換
    output_df = pd.DataFrame(output_data, columns=['Sheet Name', 'Cell', 'Excel1', 'Excel2'])

    # 出力データをExcelファイルに保存
    output_df.to_excel("出力ファイル名.xlsx", index=False)

# ファイルのパスを指定してデータを比較
file_path1 = "Excelファイル名1.xlsx"
file_path2 = "Excelファイル名2.xlsx"

compare_excel_files(file_path1, file_path2)

自分で試したこと

差分プログラムの作成

0

1Answer

可能性は次の2つあると思います。

import pandas as pd

file_path1 = "Excelファイル名1.xlsx"
file_path2 = "Excelファイル名2.xlsx"
  1. pandasがインストールされていない
  2. 指定したパスにファイルが存在しない

実行するとエラーメッセージが出ませんか?

0Like

Comments

  1. @Hiromi1623

    Questioner

    解答ありがとうございます。
    実行してもエラーも何も出ないのですが、出力ファイルも更新されません。
    コマンドプロンプトからpandasをインストールしても「already」と表示されます。
    そしてエクスプローラーで指定した絶対パスをコピーしたら、正常に該当するExcelファイルが表示されます。

  2. # データの差分を抽出
    diff_data = df2[df2 != df1]
                    ^^^^^^^^^^
    ValueError: Can only compare identically-labeled (both index and columns)
    

    上の個所でエラーとなりました。そもそも動いているコードですよね?

    環境の差ですか?
    ・Windows 10 Pro Version:22H2 OSビルド:19045.3086
    ・Python 3.11.4
    ・pandas 2.0.2

  3. @Hiromi1623

    Questioner

    返信ありがとうございます。
    試行錯誤した結果、インデント間違いと環境の差だったようです。
    ご協力ありがとうございました。

Your answer might help someone💌