Pandas.Dataframe.duplicate() 包括缺失的行作为重复项

los*_*l29 6 python ipython pandas

我有一个名为 的 Pandas Dataframe Merged,它有一个名为 的属性RegimentalNumber

我正在使用该Pandas.Dataframe.duplicated()方法从此数据框中检索重复项,如下所示:

In [16]: Merged[Merged.RegimentalNumber.duplicated() == True]
Run Code Online (Sandbox Code Playgroud)

但是,结果似乎还包含RegimentalNumber重复项的缺失值。

该方法是否duplicated()采用标志或参数来排除缺失值作为重复项?我查看了此方法的API 文档,但找不到这样的标志。

当然,我可以简单地排除缺失值,如下所示:

In [17]: duplicates = Merged[Merged.RegimentalNumber.duplicated() == True]
In [18]: duplicates[duplicates.RegimentalNumber.notnull()]
Run Code Online (Sandbox Code Playgroud)

duplicated()然而,在我看来,该方法还包含缺失值作为重复项,这似乎并不正确。有没有更简单的一步解决方案?

unu*_*tbu 4

您可以使用它df.dropna()来确保忽略 NULL 值。例如,

import numpy as np
import pandas as pd
df = pd.DataFrame({'foo': [1, np.nan, 1, 2, 3, 2, 3, np.nan, float('nan'), 
                           np.nan, float('nan'), 'xyz']})

print(df.dropna().loc[df['foo'].duplicated()])
Run Code Online (Sandbox Code Playgroud)

产量

  foo
2   1
5   2
6   3
Run Code Online (Sandbox Code Playgroud)

请注意,df['foo'].duplicated()是一个布尔系列,其索引可能大于df.dropna().index。但是,当您使用 来选择行时df.dropna().loc,布尔系列索引将重新索引以匹配df.dropna().index,因此 NULL 值可以方便地被删除。