使用熊猫nunique()和unique()的结果不同

时间:2019-05-26 05:03:01

标签: pandas dataframe unique

我有一个DF行的大10 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()在那里我会少赚钱。

1 个答案:

答案 0 :(得分: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