【问题标题】:Different outcome using pandas nunique() and unique()使用 pandas nunique() 和 unique() 的不同结果
【发布时间】:2019-05-26 05:03:01
【问题描述】:

我有一个很大的DF10 millions 行,我需要找到每一列的唯一编号。

我写了下面的函数: (需要返回一个系列)

def count_unique_values(df):
    return pd.Series(df.nunique())

我得到这个输出:

Area          210
Item          436
Element         4
Year           53
Unit            2
Value      313640
dtype: int64

预期结果应该是值 313641。

当我这样做的时候

df['Value'].unique()

我确实得到了这个答案。不明白为什么我在nunique() 那里得到的更少。

【问题讨论】:

    标签: pandas dataframe unique


    【解决方案1】:

    因为DataFrame.nunique省略了缺失值,因为默认参数dropna=TrueSeries.unique函数没有。

    示例

    df = pd.DataFrame({
            'A':list('abcdef'),
            'D':[np.nan,3,5,5,3,5],
    
    })
    
    print (df)
       A    D
    0  a  NaN
    1  b  3.0
    2  c  5.0
    3  d  5.0
    4  e  3.0
    5  f  5.0
    
    def count_unique_values(df):
        return df.nunique()
    
    print (count_unique_values(df))
    A    6
    D    2
    dtype: int64
    
    print (df['D'].unique())
    [nan  3.  5.]
    

    print (df['D'].nunique())
    2
    
    print (df['D'].unique())
    [nan  3.  5.]
    

    解决方法是添加参数dropna=False:

    print (df['D'].nunique(dropna=False))
    3
    
    print (df['D'].unique())
    3
    

    所以在你的函数中:

    def count_unique_values(df):
        return df.nunique(dropna=False)
    print (count_unique_values(df))
    A    6
    D    3
    dtype: int64
    

    【讨论】:

    • 所以如果我想计算 Nones 我应该使用 unique 而如果我不应该使用 nunique?
    • @ShayHa - 需要 dropna=False 参数,已编辑答案。
    • 很好,非常感谢。非常感谢您提供的信息。
    • 非常有帮助的解释。你@jezrael 知道这个设计背后的原因吗?这对我来说似乎令人惊讶/不一致。
    猜你喜欢
    • 2022-10-05
    • 2018-08-24
    • 2020-05-22
    • 1970-01-01
    • 2018-07-18
    • 2018-05-07
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多