2017-10-18 30 views
0

我無法在我認爲是一個簡單問題上找到任何明確的答案。這是用於Python 3.當你的列同時具有空值和非空值時,在你的數據中應用函數,循環等等時,你有什麼技巧和竅門?在循環數據時忽略NaN/null值

下面是我今天清理一些數據時碰到的例子。我有一個函數,從我的合併數據框中取兩列,然後計算一個比率,顯示兩個字符串的相似程度。

進口:

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() 

下面是我在呼喚我的代碼示例中的功能:

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

客戶名稱沒有空值,而CLIENTNAME確實有空值(當我嘗試應用我的函數時拋出錯誤)。我怎樣才能應用我的功能,而忽略NaN值(在任何一列以防萬一)?

謝謝你的時間和協助。

回答

0

您可以使用math.isnan來檢查一個值是否爲nan並跳過它。或者,您也可以用零或其他替換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