首页 > 解决方案 > 检查数据框中是否存在系列

问题描述

我需要检查一个系列是否已经作为数据框中的一行存在。数据框如下 -

        Name   Age   University
0      Ankit   NaN          BHU
1  Aishwarya  21.0          JNU
2    Shaurya  22.0           DU

我试过了-

(df == ser).all(1).any()

当数据框和系列没有空值时,它可以正常工作。例如,如果系列是['Aishwarya', 21.0, 'JNU'],则输出为True,这是正确的。但是,如果系列为['Ankit', np.nan, 'BHU'],则输出为False,即使该系列存在于数据框中。

我的问题的最小,可重复的例子 -

details = {'Name':['Ankit', 'Aishwarya', 'Shaurya'], 'Age':[np.nan, 21, 22], 'University':['BHU', 'JNU', 'DU']}
df = pd.DataFrame(details, columns = ['Name', 'Age', 'University']) 

ser1 = pd.Series(['Ankit', np.nan, 'BHU'], index = ['Name', 'Age', 'University'])
ser2 = pd.Series(['Aishwarya', 21.0, 'JNU'], index = ['Name', 'Age', 'University'])

print((ser1 == df).all(1).any())
print((ser2 == df).all(1).any())

实际输出-

False
True

预期输出-

True
True

标签: pythonpandasdataframe

解决方案


根据定义np.nan == np.nan为假

尝试df.isin()改用:

df.isin([*ser1]).all(1).any()
True

推荐阅读