मुझे पंडों की पंक्ति संख्या कैसे मिलती है DataFrame?
यह तालिका उन विभिन्न स्थितियों को संक्षेप में बताती है जिनमें आप डेटाफ्रेम (या पूर्णता के लिए श्रृंखला), अनुशंसित विधि (ओं) के साथ कुछ गिनना चाहते हैं।
फुटनोट
DataFrame.count
प्रत्येक कॉलम के लिए रिटर्न मायने रखता है Series
क्योंकि गैर-शून्य गणना कॉलम से भिन्न होती है।
DataFrameGroupBy.size
रिटर्न Series
, एक ही समूह में सभी कॉलम एक ही पंक्ति-गिनती साझा करते हैं।
DataFrameGroupBy.count
DataFrame
गैर-शून्य गणना के बाद से एक ही समूह में कॉलम भर में भिन्न हो सकता है। किसी विशिष्ट कॉलम के लिए समूह-वार गैर-शून्य गणना प्राप्त करने के लिए, df.groupby(...)['x'].count()
जहां "x" गणना करने के लिए कॉलम है, का उपयोग करें ।
न्यूनतम कोड उदाहरण
नीचे, मैं ऊपर दी गई तालिका में वर्णित प्रत्येक विधियों के उदाहरण दिखाता हूं। सबसे पहले, सेटअप -
df = pd.DataFrame({
'A': list('aabbc'), 'B': ['x', 'x', np.nan, 'x', np.nan]})
s = df['B'].copy()
df
A B
0 a x
1 a x
2 b NaN
3 b x
4 c NaN
s
0 x
1 x
2 NaN
3 x
4 NaN
Name: B, dtype: object
एक DataFrame की पंक्ति गणना: len(df)
, df.shape[0]
, याlen(df.index)
len(df)
# 5
df.shape[0]
# 5
len(df.index)
# 5
यह निरंतर समय के संचालन के प्रदर्शन की तुलना करने के लिए मूर्खतापूर्ण लगता है, खासकर जब अंतर "गंभीरता से, इसके बारे में चिंता न करें" के स्तर पर है। लेकिन यह अन्य उत्तरों के साथ एक प्रवृत्ति प्रतीत होती है, इसलिए मैं पूर्णता के लिए भी ऐसा ही कर रहा हूं।
उपरोक्त 3 विधियों में से, len(df.index)
(जैसा कि अन्य उत्तरों में उल्लेख किया गया है) सबसे तेज़ है।
ध्यान दें
- उपरोक्त सभी विधियां निरंतर समय संचालन हैं क्योंकि वे सरल विशेषता लुकअप हैं।
df.shape
(इसी तरह ndarray.shape
) एक विशेषता है जो एक टपल देता है (# Rows, # Cols)
। उदाहरण के लिए, उदाहरण के लिए यहां df.shape
लौटता (8,
2)
है।
स्तंभ एक DataFrame की गणना: df.shape[1]
,len(df.columns)
df.shape[1]
# 2
len(df.columns)
# 2
के अनुरूप len(df.index)
, len(df.columns)
दो विधियों का तेज है (लेकिन टाइप करने के लिए अधिक वर्ण लेता है)।
पंक्ति एक श्रृंखला की गणना: len(s)
, s.size
,len(s.index)
len(s)
# 5
s.size
# 5
len(s.index)
# 5
s.size
और len(s.index)
गति के संदर्भ में समान हैं। लेकिन मैं सलाह देता हूं len(df)
।
नोट
size
एक विशेषता है, और यह तत्वों की संख्या (किसी भी श्रृंखला के लिए पंक्तियों की गिनती) को लौटाता है। DataFrames भी एक आकार विशेषता को परिभाषित करता है जो उसी के समान परिणाम देता है df.shape[0] * df.shape[1]
।
गैर-नल पंक्ति गणना: DataFrame.count
औरSeries.count
यहां बताए गए तरीके केवल गैर-शून्य मानों की गणना करते हैं (जिसका अर्थ है NaNs की अनदेखी)।
कॉलिंग प्रत्येक कॉलम के DataFrame.count
लिए गैर-NaN काउंट लौटाएगी :
df.count()
A 5
B 3
dtype: int64
श्रृंखला के लिए, Series.count
समान प्रभाव का उपयोग करें:
s.count()
# 3
समूहवार पंक्ति गणना: GroupBy.size
के लिए DataFrames
, DataFrameGroupBy.size
प्रति समूह पंक्तियों की संख्या गिनने के लिए उपयोग करें।
df.groupby('A').size()
A
a 2
b 2
c 1
dtype: int64
इसी तरह, Series
आप उपयोग करेंगे SeriesGroupBy.size
।
s.groupby(df.A).size()
A
a 2
b 2
c 1
Name: B, dtype: int64
दोनों मामलों में, एक Series
वापस कर दिया जाता है। यह तब तक के लिए समझ में आता है DataFrames
जब से सभी समूह एक ही पंक्ति-गणना साझा करते हैं।
समूह-वार गैर-नल पंक्ति गणना: GroupBy.count
उपरोक्त के समान, लेकिन उपयोग करें GroupBy.count
, नहीं GroupBy.size
। ध्यान दें कि size
हमेशा एक रिटर्न देता है Series
, जबकि count
रिटर्न Series
अगर एक विशिष्ट कॉलम पर कहा जाता है, या फिर ए DataFrame
।
निम्नलिखित तरीके एक ही चीज़ लौटाते हैं:
df.groupby('A')['B'].size()
df.groupby('A').size()
A
a 2
b 2
c 1
Name: B, dtype: int64
इस बीच, के लिए count
, हमारे पास है
df.groupby('A').count()
B
A
a 2
b 1
c 0
... पूरे GroupBy ऑब्जेक्ट, v / s पर कॉल किया गया,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
एक विशिष्ट कॉलम पर कॉल किया गया।