Pandas value_counts (normalize = True) дает объект 'IntegerArray' не имеет атрибута 'sum' - PullRequest
1 голос
/ 08 июля 2020

Pandas value_counts(normalize=True) завершается ошибкой при использовании типа данных расширения. Например, при создании серии int8, содержащей pd.NA, обычно используется тип данных расширения Int8, но возникает ошибка: AttributeError: 'IntegerArray' object has no attribute 'sum'. Какое обходное решение?

pd.Series([1,pd.NA],dtype='Int8').value_counts(normalize=True)

Ответы [ 2 ]

1 голос
/ 08 июля 2020

Считается, что это ошибка регрессии, см. GH33317 . Хорошая новость в том, что это исправлено в pandas 1.1.

pd.__version__  
# '1.1.0.dev0+2004.g8d10bfb6f'

pd.Series([1, pd.NA], dtype='Int8').value_counts(normalize=True) 

1    1.0
dtype: float64

Другие примеры

s = pd.Series([1, 1, 1, 2, 2, 3, pd.NA], dtype='Int8') 
s.value_counts()
 
1    3
2    2
3    1
dtype: Int64

s.value_counts(normalize=True)

1    0.500000
2    0.333333
3    0.166667
dtype: float64

s.value_counts(normalize=True, dropna=False)

1      0.428571
2      0.285714
NaN    0.142857
3      0.142857
dtype: float64
1 голос
/ 08 июля 2020

Для решения проблемы можно использовать любое из следующего:

# 1) works if you're ok with dropping NA
pd.Series([1,pd.NA],dtype='Int8').dropna().astype(int).value_counts(normalize=True)

# 2) works if you're ok with switching to a non-extension datatype such as float
pd.Series([1,pd.NA],dtype='Int8').astype(float).value_counts(normalize=True)

# 3) The issue may be fixed in a future versions of pandas. Try using a pandas version >= 1.1
...