पांडा में आकार और गणना के बीच क्या अंतर है?


87

groupby("x").countऔर groupby("x").sizeपंडों में क्या अंतर है ?

क्या आकार सिर्फ नील को बाहर करता है?


4
प्रलेखन कहा, कि आकार "NDFrame में तत्वों की वापसी संख्या", और गिनती "। गैर एनए की संख्या के साथ श्रृंखला वापसी / बातिल टिप्पणियों से अधिक का अनुरोध किया अक्ष साथ ही गैर-चल बिन्दु डेटा के साथ काम करता है (पता लगाता है NaN और कोई नहीं)"
हम्सटरनिक

स्वीकृत उत्तर के अतिरिक्त, मेरे उत्तर में कुछ अन्य रोचक भेद भी बताए गए हैं
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
मुझे लगता है कि एक श्रृंखला का आकार देते हुए काउंट एक डेटाफ़्रेम भी लौटाता है?
Mr_and_Mrs_D

1
.Size () फ़ंक्शन को केवल कॉलम के लिए विशेष कॉलम का कुल मूल्य प्राप्त होता है। कॉलम () का उपयोग हर कॉलम के लिए किया जाता है।
नचिकेत

@Mr_and_Mrs_D आकार एक पूर्णांक देता है
बजे

@boardtc df.size एक नंबर देता है - ग्रुपबी विधियों पर यहां चर्चा की गई है, प्रश्न में लिंक देखें।
Mr_and_Mrs_D

मेरे प्रश्न के लिए - गणना और आकार वास्तव में क्रमशः DataFrame और Series को लौटाते हैं जब DataFrameGroupBy उदाहरण के लिए "बाध्य" - प्रश्न में SeriesGroupBy से बंधे होते हैं, इसलिए वे दोनों एक श्रृंखला का उदाहरण देते हैं
Mr_and_rs_D_

25

पांडा में आकार और गणना के बीच क्या अंतर है?

अन्य जवाबों ने अंतर को इंगित किया है, हालांकि, यह कहना पूरी तरह से सटीक नहीं है कि " sizeNaNs को गिनता है जबकि countनहीं करता है"। जबकि sizeवास्तव में Nans गिनती करता है, यह वास्तव में तथ्य यह है कि का परिणाम है sizeरिटर्न आकार वस्तु के (या लंबाई) इसे कहा जाता । स्वाभाविक रूप से, इसमें पंक्तियाँ / मूल्य भी शामिल हैं जो NaN हैं।

इसलिए, संक्षेप में, sizeश्रृंखला / 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()बनाम कॉल करते समय उत्पन्न आउटपुट की संरचना में भी अंतर है 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.countजब आप countसभी स्तंभ पर कॉल करते हैं, तो एक DataFrame देता है , जबकि GroupBy.sizeएक श्रृंखला देता है।

इसका कारण यह 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काम नहीं करता; खाली डेटाफ़्रेम लौटाया जाता है:

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

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

मेरा मानना ​​है कि इसका कारण यह है कि 'count'उस श्रृंखला पर किया जाना चाहिए जो valuesतर्क के लिए पारित हो जाती है, और जब कुछ भी पारित नहीं होता है, तो पांडा बिना किसी धारणा के निर्णय लेते हैं।


7

केवल @ Edchum के उत्तर में थोड़ा सा जोड़ने के लिए, भले ही डेटा में कोई NA मान न हो, गणना का परिणाम () अधिक क्रिया है, पहले उदाहरण का उपयोग करते हुए:

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 NO, यह नहीं है। groupbyआउटपुट में अंतर का कारण यहां बताया गया है
cs95

1

जब हम सामान्य डेटाफ्रेम के साथ काम कर रहे होते हैं तो केवल अंतर NAN मूल्यों का समावेश होगा, इसका मतलब है कि पंक्तियों की गिनती करते समय NAN मान शामिल नहीं हैं।

लेकिन अगर हम इन कार्यों का उपयोग कर रहे हैं groupby, तो सही परिणाम प्राप्त करने के लिए count()हमें किसी भी संख्यात्मक क्षेत्र को संबद्ध groupbyकरना होगा ताकि उन समूहों की सटीक संख्या प्राप्त की जा सके जहां size()इस प्रकार के संघ की कोई आवश्यकता नहीं है।


0

उपरोक्त सभी उत्तरों के अलावा, मैं एक और अंतर बताना चाहूंगा जो मुझे महत्वपूर्ण लगता है।

आप पांडा के Datarameआकार को सहसंबंधित कर सकते हैं और जावा के Vectorsआकार और लंबाई के साथ गणना कर सकते हैं । जब हम वेक्टर बनाते हैं तो कुछ पूर्वनिर्धारित मेमोरी इसे आवंटित की जाती है। जब हम तत्वों की संख्या के करीब पहुँचते हैं, तो तत्वों को जोड़ते समय यह कब्जे में आ सकता है, इसके लिए अधिक मेमोरी आवंटित की जाती है। इसी तरह, जैसे DataFrameही हम तत्वों को जोड़ते हैं, इसके लिए आवंटित मेमोरी बढ़ जाती है।

आकार विशेषता मेमोरी सेल की संख्या को आवंटित करती है DataFrameजबकि गिनती उन तत्वों की संख्या देती है जो वास्तव में मौजूद हैं DataFrame। उदाहरण के लिए, यहाँ छवि विवरण दर्ज करें

आप देख सकते हैं कि इसमें 3 पंक्तियाँ हैं DataFrame, इसका आकार 6 है।

इस उत्तर कवर आकार और के संबंध में गिनती अंतर DataFrameऔर नहीं Pandas Series। मैंने जांच नहीं की है कि क्या होता हैSeries

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.