Разные результаты с использованием панд nunique () и unique () - PullRequest
1 голос
/ 26 мая 2019

У меня большой 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 Ответ

1 голос
/ 26 мая 2019

Поскольку DataFrame.nunique пропускают пропущенные значения, поскольку параметр по умолчанию dropna=True, Series.unique не функционирует.

Sample :

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
...