检测列中的两个连续空值

Detect two consecutive null values in a column

如果数据框列中有两个连续的空值,我想要一个 returns 布尔值(False 或 True)的函数。

我尝试创建一个遍历整个列的循环,returns 如果它在一行中找到两个空值,则为真。

def consec_null(df,i):
 j=0
 b=False
 while j<(len(df.index)-1):
  if ((pd.isnull(df.iloc[j,i])) and (pd.isnull(df.iloc[j+1,i]))):
   b=True
  else: 
   j=j+1   
 return b

此代码保持 运行 不显示任何结果或错误。

如果满足条件,您将进入无限循环。我认为您只是忘记在 while 条件中添加 and b

尝试替换:

while j<(len(df.index)-1):

作者:

while b and j<(len(df.index)-1):

你可以使用 .shift(-1),像这样:

import pandas as pd
import numpy as np


def consec_null(df, i):
    col = df[df.columns[i]]
    return (col.isnull() & col.shift(-1).isnull()).any()


df = pd.DataFrame.from_dict({"A": [1.0, np.nan, 3.0, np.nan, 5.0], "B": [1.0, 2.0, np.nan, np.nan, 5.0]})

print(consec_null(df, 0))
print(consec_null(df, 1))

输出:

False  # because A doesn't have 2 consecutive nulls
True   # because B has 2 consecutive nulls