اذهب إلى المحتوى
  • 0

الفرق بين size و count في pandas

Mohamed Elnemr

السؤال

Recommended Posts

  • 0

size و count كل منهما يستخدم من أجل أغراض مختلفة.
size هو attribute تقوم بحساب حجم (أو طول) الكائن الذي تم استدعاؤه عليه. وبطبيعة الحال يتضمن هذا أيضاً الصفوف / القيم التي هي NaN. أما count فهو تابع مهمته عد الخلايا التي ليست NaN لكل عمود أو صف.

import pandas as pd
import numpy as np
df = pd.DataFrame({'col': ['x', np.nan, 'x']})
df
"""
    col
0 	x
1 	NaN
2 	x
"""
df.col.size # 3
df.col.count() # 2    nan  لم يحسب ال 

أيضاً هناك اختلاف في بنية الناتج عند استدعاء GroupBy.size و GroupBy.count. حيث أن GroupBy.count تعيد DataFrame أما GroupBy.siz تعيد series:

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'gb': list('aaab'),
    'col': ['x', np.nan, 'x',"x"]})
df
"""
  gb 	col
0 	a 	x
1 	a 	NaN
2 	a 	x
3 	b 	x
"""
df.groupby('gb').size()
"""
    gb
a    3
b    1
dtype: int64
"""
df.groupby('gb').count()
"""
    col
gb 	
a 	2
b 	1
"""
type(df.groupby('gb').count())
# pandas.core.frame.DataFrame
type(df.groupby('gb').size())
# pandas.core.series.Series

هناك اختلاف أخير عند استخدامنا ل pivot_table. لنفترض أننا نود حساب ال cross tabulation لـلداتافريم التالي:

df
"""
   A  B
0  0  1
1  0  1
2  1  2
3  0  2
4  0  0
"""
pd.crosstab(df.A, df.B)  
"""
B  0  1  2
A         
0  1  2  1
1  0  0  1
"""
#يمكنك عرض الحجم pivot_table باستخدام  
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]
"""

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الفرق المحوري بين الدالتين أن size يمكن أن تحتوي على NaN اما count فلا،أنظر المثال التالي للتوضيح أكثر:

In [1]:
df = pd.DataFrame({'x':[0,1,2,2], 'y':[1,2,4,np.NaN], 'z':np.random.randn(4)})
df

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

In [2]:
print(df.groupby(['x'])['y'].count())

x
0    1
1    1
2    1

In [3]:
print(df.groupby(['x'])['y'].size())

x
0    1
1    1
2    2
 

لاحظ أنه في count لم يقم بعَد ال NaN بينما قام بعَدها في size.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...