팬더의 크기와 개수의 차이점은 무엇입니까?


87

그게 팬더 groupby("x").count와 의 차이점 groupby("x").size입니까?

크기는 nil을 제외합니까?


4
문서에 따르면 해당 크기는 "NDFrame의 요소 수를 반환"하고 "요청 된 축에 대해 비 NA / null 관측치 수가있는 시리즈를 반환합니다. 비 부동 소수점 데이터에서도 작동합니다 (NaN 및 없음 감지)"
hamsternik

받아 들여지는 답변 외에도 여기 내 답변에서 강조 표시된 다른 흥미로운 차이점이 있습니다 .
cs95

답변:


99

sizeNaN값을 포함하고 다음을 포함 count하지 않습니다.

In [46]:
df = pd.DataFrame({'a':[0,0,1,2,2,2], 'b':[1,2,3,4,np.NaN,4], 'c':np.random.randn(6)})
df

Out[46]:
   a   b         c
0  0   1  1.067627
1  0   2  0.554691
2  1   3  0.458084
3  2   4  0.426635
4  2 NaN -2.238091
5  2   4  1.256943

In [48]:
print(df.groupby(['a'])['b'].count())
print(df.groupby(['a'])['b'].size())

a
0    2
1    1
2    2
Name: b, dtype: int64

a
0    2
1    1
2    3
dtype: int64 

6
시리즈 크기를 조정하는 동안 카운트도 DataFrame을 반환한다고 생각합니다.
Mr_and_Mrs_D

1
.size () 함수는 특정 열의 집계 된 값만 가져 오는 반면 .column ()은 모든 열에 사용됩니다.
Nachiket

@Mr_and_Mrs_D 크기는 정수를 반환합니다.
boardtc

@boardtc df.size는 숫자를 반환합니다-groupby 메서드는 여기에서 설명합니다. 질문의 링크를 참조하십시오.
Mr_and_Mrs_D

내 질문에 관해서는-수와 크기는 실제로 DataFrameGroupBy 인스턴스에 "바인딩"될 때 DataFrame과 Series를 각각 반환합니다.-질문에서 SeriesGroupBy에 바인딩되어 있으므로 둘 다 Series 인스턴스를 반환합니다
Mr_and_Mrs_D

25

팬더의 크기와 개수의 차이점은 무엇입니까?

다른 답변은 차이점을 지적했지만 "N을 계산하는 반면 그렇지 않은" 이라고 말하는 것은 완전히 정확 하지 않습니다. 실제로 NaN을 계산 하지만 실제로 는 호출 된 객체 크기 (또는 길이)반환 한다는 사실의 결과입니다 . 당연히 여기에는 NaN 인 행 / 값도 포함됩니다.sizecountsizesize

요약하자면 sizeSeries / DataFrame 1 의 크기를 반환합니다 .

df = pd.DataFrame({'A': ['x', 'y', np.nan, 'z']})
df

     A
0    x
1    y
2  NaN
3    z

df.A.size
# 4

... count비 NaN 값 을 계산하는 동안 :

df.A.count()
# 3 

공지 size특성을된다 (동일한 결과를 제공 len(df)또는 len(df.A)). count함수입니다.

1. DataFrame.size또한 속성이며 DataFrame (행 x 열)의 요소 수를 반환합니다.


동작 GroupBy-출력 구조

기본적인 차이점 외에도 GroupBy.size()vs를 호출 할 때 생성 된 출력의 구조에도 차이가 GroupBy.count()있습니다.

df = pd.DataFrame({'A': list('aaabbccc'), 'B': ['x', 'x', np.nan, np.nan, np.nan, np.nan, 'x', 'x']})
df
   A    B
0  a    x
1  a    x
2  a  NaN
3  b  NaN
4  b  NaN
5  c  NaN
6  c    x
7  c    x

중히 여기다,

df.groupby('A').size()

A
a    3
b    2
c    3
dtype: int64

대,

df.groupby('A').count()

   B
A   
a  2
b  0
c  2

GroupBy.countcount모든 열 을 호출하면 DataFrame 을 GroupBy.size반환하고 Series 를 반환합니다.

그 이유는 size모든 열에 대해 동일하므로 단일 결과 만 반환됩니다. 한편 count결과는 각 열에있는 NaN 수에 따라 달라 지므로 각 열에 대해이 호출됩니다.


행동 pivot_table

또 다른 예는 pivot_table이 데이터를 처리 하는 방법 입니다. 다음의 교차 표를 계산한다고 가정합니다.

df

   A  B
0  0  1
1  0  1
2  1  2
3  0  2
4  0  0

pd.crosstab(df.A, df.B)  # Result we expect, but with `pivot_table`.

B  0  1  2
A         
0  1  2  1
1  0  0  1

를 사용 pivot_table하면 다음을 발행 할 수 있습니다 size.

df.pivot_table(index='A', columns='B', aggfunc='size', fill_value=0)

B  0  1  2
A         
0  1  2  1
1  0  0  1

그러나 count작동하지 않습니다. 빈 DataFrame이 반환됩니다.

df.pivot_table(index='A', columns='B', aggfunc='count')

Empty DataFrame
Columns: []
Index: [0, 1]

그 이유 'count'values인수에 전달 된 시리즈에 대해 수행되어야 하고 아무것도 전달되지 않으면 팬더는 가정하지 않기로 결정하기 때문이라고 생각합니다.


7

@Edchum의 답변에 약간만 추가하면 데이터에 NA 값이 없더라도 이전 예제를 사용하여 count ()의 결과가 더 장황합니다.

grouped = df.groupby('a')
grouped.count()
Out[197]: 
   b  c
a      
0  2  2
1  1  1
2  2  3
grouped.size()
Out[198]: 
a
0    2
1    1
2    3
dtype: int64

판다에서 size와 동등한 우아한 것 같습니다 count.
QM.py

@ QM.py 아니요, 그렇지 않습니다. groupby출력 차이에 대한 이유 는 여기 에 설명되어 있습니다 .
cs95

1

일반 데이터 프레임을 다룰 때 차이점은 NAN 값이 포함된다는 것입니다.

그러나 groupbythen 과 함께 이러한 함수를 사용하는 경우 올바른 결과 를 얻으려면 이 유형의 연결이 필요하지 않은 정확한 그룹 수를 얻기 위해 count()숫자 필드를와 연결 해야합니다.groupbysize()


0

위의 모든 답변 외에도 중요해 보이는 차이점을 하나 더 지적하고 싶습니다.

Panda의 Datarame크기와 개수를 Java의 Vectors크기 및 길이 와 연관시킬 수 있습니다 . 벡터를 만들 때 미리 정의 된 메모리가 할당됩니다. 요소를 추가하는 동안 차지할 수있는 요소 수에 가까워지면 더 많은 메모리가 할당됩니다. 마찬가지로 DataFrame요소를 추가하면 할당 된 메모리가 증가합니다.

Size 속성은 할당 된 메모리 셀의 DataFrame수를 제공 하는 반면 count는 실제로 존재하는 요소의 수를 제공합니다 DataFrame. 예를 들면 여기에 이미지 설명 입력

에는 3 개의 행이 있지만 DataFrame크기는 6입니다.

이 답변 커버의 크기에 대한 계수의 차이 DataFrame가 아니라 Pandas Series. 나는 무슨 일이 일어나는지 확인하지 않았다Series

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.