检测列中的两个连续空值
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
如果数据框列中有两个连续的空值,我想要一个 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