首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pandas unique()和unique()得到不同的结果

使用pandas unique()和unique()得到不同的结果
EN

Stack Overflow用户
提问于 2019-05-26 13:03:01
回答 1查看 9.7K关注 0票数 11

我有一个包含10 millions行的大DF,我需要找到每列的唯一编号。

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

代码语言:javascript
复制
def count_unique_values(df):
    return pd.Series(df.nunique())

我得到了这个输出:

代码语言:javascript
复制
Area          210
Item          436
Element         4
Year           53
Unit            2
Value      313640
dtype: int64

预期结果应为值313641。

当我这么做的时候

代码语言:javascript
复制
df['Value'].unique()

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-26 13:05:48

因为DataFrame.nunique省略了缺失值,因为缺省参数dropna=True,所以Series.unique函数不是。

示例

代码语言:javascript
复制
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.]

代码语言:javascript
复制
print (df['D'].nunique())
2

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

解决方案是添加参数dropna=False

代码语言:javascript
复制
print (df['D'].nunique(dropna=False))
3

print (df['D'].unique())
3

所以在你的函数中:

代码语言:javascript
复制
def count_unique_values(df):
    return df.nunique(dropna=False)
print (count_unique_values(df))
A    6
D    3
dtype: int64
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56310788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档