2017-10-18 4 views
0

私は簡単な質問であると思われるものについて明確な答えを見つけることができませんでした。これはPython 3のためのものです。カラムにnull値と非ヌル値の両方がある場合、関数、ループなどをデータに適用する際のヒントやヒントは何ですか?データをループしながらNaN/null値を無視する

ここに、私が今日いくつかのデータをクリーニングしていたときの例があります。私は、私のマージされたデータフレームから2つの列を取って、類似した2つの文字列がどれくらいあるかを示す比率を計算する関数を持っています。

輸入:

from difflib import SequenceMatcher 
import pandas as pd 
import numpy as np 
import pyodbc 
import difflib 
import os 
from functools import partial 
import datetime 

私の機能:

def apply_sm(merged, c1, c2): 
     return difflib.SequenceMatcher(None, merged[c1], merged[c2]).ratio() 

ここで私は私のコード例で関数を呼び出している:CLIENTNAMEながら

merged['NameMatchRatio'] = merged.apply(partial(apply_sm, c1='CLIENT NAME', c2='ClientName'), axis=1) 

クライアント名は、NULL値を持っていませんnull値(関数を適用しようとするとエラーをスローする)があります。 NaN値を無視して関数を適用するにはどうすればいいですか?

ご協力いただきありがとうございます。

答えて

0

あなたは値がNaNであるかどうかを確認するためにmath.isnanを使用して、それをスキップすることができます。あるいは、nanをゼロなどで置き換えて、関数を適用することもできます。それは本当にあなたが達成したいことにかかっています。

簡単な例:あなたが合うと考えるよう

import math 

test_variable = math.nan  
if math.isnan(test_variable): 
    print("it is a nan value") 

ちょうどあなたのコードにこのロジックを組み込みます。

0
def apply_sm(merged, c1, c2): 
    if not merged[[c1,c2]].isnull().any(): 
    return difflib.SequenceMatcher(None, merged[c1], merged[c2]).ratio() 
    return 0.0 # <-- you could handle the Null case here 
関連する問題