2017-10-18 50 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