2017-11-22 16 views
0

私はPandasデータフレームを反復処理し、すべての組み合わせではなく各行のペアについてのみfuzz.ratioスコアを取得します。私のデータフレームは、次のようになります。Python FuzzyWuzzy Pandasデータフレームの行のスコア

Acct_Owner住所アドレス2

0、名1は、NaN、33リバティ・ストリート
1、Name2は、330 N Wabashのアヴェスイート39300、330北Wabash Avenue Suite 39300

欠損値があるため、値の欠落行をスキップするために "try:"を使用しています。

for row in df_high_scores.index: 
    k1 = df_high_scores.get_value(row, 'Address') 
    k2 = df_high_scores.get_value(row, 'Address2') 

    try: 
     df_high_scores['Address_Score'] = fuzz.ratio(k1, k2) 
    except: 
     None 

結果はすべての行で同じスコアを示している。以下は、forループ電流があります。ループがループを繰り返さずに各行にスコアを付ける理由を理解したいと思っています。読んでいただきありがとうございます...

答えて

0

割り当てでは、インデックス付きの正しい行を使用する必要があります。

df_high_scores.loc[row, 'Address_Score'] = fuzz.ratio(k1, k2) 

反復行の代わりにこれを行うには良い方法は次のとおりです。

df_high_scores['Address_Score'] = df_high_scores.apply(lambda x : fuzz.ratio(x.Address, x.Address2), axis=1) 

が大きな配列が実際に遅い適用されます。 numpy配列やpandas系列を入力として渡すことができるかどうかを調べるには、あいまいに見てください。

+0

ありがとうBabu!前者のアプローチは機能し、完璧な意味を持ちます。大きなデータで問題が発生した場合は、.Applyオプションを使用します。 –

関連する問題