2017-05-11 9 views
1
​​

違いがある場合は、それらのセルの場所をリストに保存します。それは([1、1]のようなものではない)フォーマット「A1」にする必要がありますので、私はこれを通してそれを渡すことができます:pandas diffから細胞の位置を取得するには?

redFill = PatternFill(start_color='FFEE1111', end_color='FFEE1111', fill_type='solid') 
lsws['A1'].fill = redFill 
lsfh.save(sfcn) 

私はthisのようなソリューションを見てきましたが、私は得ることができませんでしたそれは働く/それを理解していない。たとえば、次のように動作しません:

def highlight_cells(): 
    df1 = pd.read_excel(mxln) # Loads master xlsx for comparison 
    df2 = pd.read_excel(sfcn) # Loads student xlsx for comparison 
    difference = df2[df2 != df1] # Scans for differences 
    return ['background-color: yellow'] 

df2.style.apply(highlight_cells) 

答えて

2

をExcelはあなたが行うことができます座標として2 pandas.DataFrameからの差分セルを取得するには:

コード:

def diff_cell_indices(dataframe1, dataframe2): 
    from openpyxl.utils import get_column_letter as column_letter 

    x_ofs = dataframe1.columns.nlevels + 1 
    y_ofs = dataframe1.index.nlevels + 1 
    return [column_letter(x + x_ofs) + str(y + y_ofs) for 
      y, x in zip(*np.where(dataframe1 != dataframe2))] 

テストコードを:

import pandas as pd 
df1 = pd.read_excel('test.xlsx') 
print(df1) 

df2 = df.copy() 
df2.C['R2'] = 1 
print(df2) 

print(diff_cell_indices(df1, df2)) 

結果:

B C 
R2 2 3 
R3 4 5 

    B C 
R2 2 1 
R3 4 5 

['C2'] 
+0

@CharlieClark、編集のために感謝します。参考までに、http://stackoverflow.com/a/33598710/7311767 –

+0

からコピー&ペーストしてください。「df2.C ['R2'] = 1」が何をしているのか分かりません。また、私は関数を実行すると、一見無作為なセルの座標の巨大なリストを取得し、異なるものではありません。 – stackoa

+0

これは、テストコードが違いを表示できるように、2つのフレームに違いがあるように強制します。それは文字通りセット列Cの列R2を1に等しいと読みます。それはパンダです。そして、私はあなたに実際のデータを見て、それが正しい違いを示していないのを助けなければならないでしょう。私のテストをまず試してみることを提案し、そこからビルドします。 –

関連する問題