循环访问数据时忽略 NaN/null 值



我无法找到任何明确的答案,我认为这是一个简单的问题。 这适用于 Python 3。 应用函数、循环等时有哪些提示和技巧......当您的列同时具有空值和非空值时,在您的数据上?

这是我今天清理一些数据时遇到的例子。我有一个函数,它从合并的数据帧中获取两列,然后计算一个比率,显示两个字符串的相似程度。

进口:

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)

CLIENT NAME 没有空值,而 ClientName 确实有空值(当我尝试应用我的函数时会抛出错误)。 如何在忽略 NaN 值的同时应用我的函数(在任一列中以防万一)?

感谢您的时间和帮助。

您可以使用math.isnan检查值是否为nan并跳过它。或者,您也可以将 nan 替换为零或其他内容,然后在其上应用您的函数。这真的取决于你想要实现什么。

一个简单的例子:

import math
test_variable = math.nan    
if math.isnan(test_variable):
    print("it is a nan value")
只需在你

认为合适的情况下将此逻辑合并到你的代码中。

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

最新更新