আমি কীভাবে একটি পান্ডাস ডেটা ফ্রেমের সারি গণনা পেতে পারি?


929

আমি পান্ডাদের সাথে ডাটাফ্রেম ডিএফের সারি সংখ্যা পাওয়ার চেষ্টা করছি এবং আমার কোডটি এখানে।

পদ্ধতি 1:

total_rows = df.count
print total_rows +1

পদ্ধতি 2:

total_rows = df['First_columnn_label'].count
print total_rows +1

দুটি কোড স্নিপেটই আমাকে এই ত্রুটি দেয়:

TypeError: +: 'উদাহরণস্বরূপ' এবং 'int' এর জন্য অসমর্থিত অপারেণ্ড প্রকার (গুলি)

আমি কি ভুল করছি?


12
ঠিক আছে, আমি জানতে পেরেছি, আমার উচিত পদ্ধতিটি যাচাই না করার পদ্ধতিটি বলা উচিত ছিল, সুতরাং এটি df.count হওয়া উচিত () কোনও df.count
ইয়ামু

56
^ বিপজ্জনক! সাবধান থাকুন যে df.count()প্রতিটি কলামের জন্য কেবল নন-এনএ / এনএএন সারিগুলির গণনা প্রদান করবে। df.shape[0]পরিবর্তে আপনার ব্যবহার করা উচিত , যা সর্বদা সঠিকভাবে আপনাকে সারিগুলির সংখ্যা বলবে।
স্মি

3
নোট করুন যে ডেটাফ্রেম খালি থাকলে df.count কোনও প্রারক ফেরত দেবে না (যেমন, পিডি .ডাটা ফ্রেম (কলামগুলি = ["নীল", "লাল")। গণনা 0 নয়)
মার্সেলো বিয়েলসা

উত্তর:


1247

আপনি .shapeসম্পত্তি বা ঠিক ব্যবহার করতে পারেন len(DataFrame.index)। তবে, এখানে উল্লেখযোগ্য পারফরম্যান্স পার্থক্য রয়েছে ( len(DataFrame.index)দ্রুততম):

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: df = pd.DataFrame(np.arange(12).reshape(4,3))

In [4]: df
Out[4]: 
   0  1  2
0  0  1  2
1  3  4  5
2  6  7  8
3  9  10 11

In [5]: df.shape
Out[5]: (4, 3)

In [6]: timeit df.shape
2.77 µs ± 644 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [7]: timeit df[0].count()
348 µs ± 1.31 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [8]: len(df.index)
Out[8]: 4

In [9]: timeit len(df.index)
990 ns ± 4.97 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

এখানে চিত্র বর্ণনা লিখুন

সম্পাদনা: যেমন @ ড্যান অ্যালেন মন্তব্যগুলিতে উল্লেখ করেছেন len(df.index)এবং df[0].count()এগুলি countবাদ দিয়ে বিনিময়যোগ্য নয় NaN,


13
shapeলেন (ডিএফ) এর পরিবর্তে ইন্টারেক্টিভ কাজের ক্ষেত্রে কেন ব্যবহার করার একটি কারণ রয়েছে : বিভিন্ন ফিল্টারিংয়ের চেষ্টা করে, আমার প্রায়শই জানতে হবে কতগুলি আইটেম রয়ে গেছে। আকারের সাথে আমি এটি দেখতে পেলাম আমার ফিল্টারিংয়ের পরে। শেপ যুক্ত করে। লেন () দিয়ে কমান্ড-লাইনের সম্পাদনা অনেক বেশি জটিল হয়ে ওঠে এবং পিছনে পিছনে যায়।
কে.-মাইকেল আয়ে

9
ওপি-র জন্য কাজ করবে না, তবে যদি আপনাকে কেবল ডাটাফ্রেমটি খালি রয়েছে কিনা তা জানতে প্রয়োজন, df.emptyএটি সর্বোত্তম বিকল্প।
jtschoonhoven

19
আমি জানি এটি কিছুক্ষণ হয়ে গেছে, তবে লেন নয় (df.index) 381 ন্যানোসেকেন্ড বা 0.381 মাইক্রোসেকেন্ড নেয়, ডিএফ.শ্যাপটি ১.১17 মাইক্রোসেকেন্ড নিয়ে 3 গতি কম। আমি কি কিছু রেখে গেলাম? @ রুট
টিজি

11
(3,3) ম্যাট্রিক্স খারাপ উদাহরণ কারণ এটি আকারের টিপলের
ক্রমটি

4
এর df.shape[0]চেয়ে দ্রুত len(df)বা কীভাবে len(df.columns)? যেহেতু 1 এনএস (ন্যানোসেকেন্ড) = 1000 (s (মাইক্রোসেকেন্ড), সুতরাং 1.17µs = 1170ns, যার অর্থ এটি 381ns এর চেয়ে প্রায় 3 গুণ বেশি ধীর
जेফ

303

ধরুন dfআপনার ডেটা ফ্রেমটি তখন:

count_row = df.shape[0]  # gives number of row count
count_col = df.shape[1]  # gives number of col count

বা আরও সংক্ষিপ্তভাবে,

r, c = df.shape

4
যদি ডেটা সেটটি বড় হয় তবে আপনার কেবল সারি গণনার প্রয়োজন হলে লেন (df.index) df.shape [0] এর তুলনায় উল্লেখযোগ্যভাবে দ্রুত হয়। আমি এটি পরীক্ষা করেছি।
সুমিত পোখরেল

145

ব্যবহার len(df)। এটি পান্ডা 0.11 বা সম্ভবত এর আগেও কাজ করে।

__len__()বর্তমানে (0.12) এর সাথে নথিভুক্ত করা হয়েছে Returns length of index। সময় সম্পর্কিত তথ্য, মূলের উত্তরের মতোই সেট আপ করুন:

In [7]: timeit len(df.index)
1000000 loops, best of 3: 248 ns per loop

In [8]: timeit len(df)
1000000 loops, best of 3: 573 ns per loop

একটি অতিরিক্ত ফাংশন কলের কারণে এটি len(df.index)সরাসরি কল করার চেয়ে কিছুটা ধীর হয় তবে বেশিরভাগ ক্ষেত্রে ব্যবহারের ক্ষেত্রে এটি কোনও ভূমিকা পালন করে না।


81

আমি কীভাবে একটি পান্ডাস ডেটা ফ্রেমের সারি গণনা পেতে পারি?

এই সারণীটি প্রস্তাবিত পদ্ধতি (গুলি) সহ আপনি যে কোনও পরিস্থিতিতে ডেটাফ্রেমে (বা সিরিজ, সম্পূর্ণতার জন্য) কিছু গণনা করতে চান তাতে সংক্ষিপ্তসার রয়েছে।

এখানে চিত্র বর্ণনা লিখুন

পাদটিকা

  1. DataFrame.countপ্রতিটি কলামের জন্য একটি হিসাবে Seriesগণনা করে কারণ নন-নাল গণনা কলাম অনুসারে পরিবর্তিত হয়।
  2. DataFrameGroupBy.sizeএকটি ফেরৎ Seriesএকই গ্রুপ ভাগ সব কলাম একই সারিতে গোনা গেছে।
  3. 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 একটি বৈশিষ্ট্য, এবং এটি উপাদানগুলির সংখ্যা (যে কোনও সিরিজের জন্য = সারি সংখ্যা) প্রদান করে। ডেটাফ্রেমগুলি একটি আকারের বৈশিষ্ট্যও সংজ্ঞায়িত করে যা একই ফলাফল হিসাবে দেয় df.shape[0] * df.shape[1]

নন-নাল সারি গণনা: DataFrame.countএবংSeries.count

এখানে বর্ণিত পদ্ধতিগুলি কেবল নন-নাল মান গণনা করে (যার অর্থ NaNs উপেক্ষা করা হয়)।

কলিং প্রতিটি কলামের DataFrame.countজন্য নন-নন গণনাগুলি ফিরিয়ে দেবে :

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

... পুরো গ্রুপ বাই অবজেক্টে কল করা হয়েছে, v / s,

df.groupby('A')['B'].count()

A
a    2
b    1
c    0
Name: B, dtype: int64

নির্দিষ্ট কলামে ডাকা হয়।


34

টি এল; ডিআর

ব্যবহার len(df)


len()আপনার বন্ধু, এটি সারি গণনার জন্য ব্যবহার করা যেতে পারে len(df)

বিকল্পভাবে, আপনি দ্বারা df.indexএবং সমস্ত কলাম দ্বারা সমস্ত সারি অ্যাক্সেস করতে পারেন df.columnsএবং আপনি len(anyList)তালিকাটির গণনা len(df.index)পাওয়ার জন্য, সারিগুলির সংখ্যা পাওয়ার len(df.columns)জন্য এবং কলামের গণনার জন্য ব্যবহার করতে পারেন।

অথবা, আপনি ব্যবহার করতে পারেন df.shape, আপনি অ্যাক্সেস করতে সারির সংখ্যা শুধুমাত্র ব্যবহার করতে চান তাহলে যা একসঙ্গে সারি এবং কলামের সংখ্যা ফেরৎ df.shape[0]এবং কলাম সংখ্যার জন্য শুধুমাত্র ব্যবহার করুন: df.shape[1]


19

উপরের উত্তরগুলি বাদে df.axesসারি এবং কলাম সূচকগুলির সাথে টিপল পেতে এবং তারপরে len()ফাংশনটি ব্যবহার করতে ব্যবহার করুন:

total_rows=len(df.axes[0])
total_cols=len(df.axes[1])

2
এটি সূচক বিষয়বস্তুগুলি প্রদান করে, যা মূল অনুলিপিগুলি হতে পারে বা নাও হতে পারে, যা অপ্রয়োজনীয় যদি আপনি কেবল দৈর্ঘ্য পরীক্ষা করার পরে এগুলি বাতিল করে দিচ্ছেন। আপনি যদি সূচকে অন্য কিছু করার পরিকল্পনা না করেন তবে ব্যবহার করবেন না
সিএস 95

9

... জান-ফিলিপ গেহর্ককের উত্তরে বিল্ডিং।

কারণ len(df)বা len(df.index)দ্রুততর চেয়ে df.shape[0]। কোড দেখুন। df.shape এমন একটি @propertyযা ডেটাফ্রেম পদ্ধতিটি lenদু'বার কল করে।

df.shape??
Type:        property
String form: <property object at 0x1127b33c0>
Source:     
# df.shape.fget
@property
def shape(self):
    """
    Return a tuple representing the dimensionality of the DataFrame.
    """
    return len(self.index), len(self.columns)

লেনের ফণার নীচে (ডিএফ)

df.__len__??
Signature: df.__len__()
Source:   
    def __len__(self):
        """Returns length of info axis, but here we use the index """
        return len(self.index)
File:      ~/miniconda2/lib/python2.7/site-packages/pandas/core/frame.py
Type:      instancemethod

len(df.index)len(df)এটির চেয়ে কম দ্রুত হবে কারণ এতে একটি কম ফাংশন কল রয়েছে তবে এটি সর্বদা এর চেয়ে দ্রুতdf.shape[0]


7

আমি Rব্যাকগ্রাউন্ড থেকে পান্ডাসে আসি এবং আমি দেখতে পাচ্ছি যে সারি বা কলাম নির্বাচন করার ক্ষেত্রে পান্ডাস আরও জটিল। আমাকে এটির সাথে কিছুক্ষণ লড়াই করতে হয়েছিল, তারপরে আমি এর সাথে মোকাবিলা করার কিছু উপায় খুঁজে পেয়েছি:

কলামের সংখ্যা পাওয়া:

len(df.columns)  
## Here:
#df is your data.frame
#df.columns return a string, it contains column's titles of the df. 
#Then, "len()" gets the length of it.

সারি সংখ্যা পাওয়া:

len(df.index) #It's similar.

পান্ডাস কিছুক্ষণ ব্যবহার করার পরে , আমার মনে হয় আমাদের সাথে যাওয়া উচিত df.shape। এটি যথাক্রমে সারি এবং কলামগুলির সংখ্যা প্রদান করে।
Catbuilts

4

যদি আপনি শৃঙ্খলাবদ্ধ ক্রিয়াকলাপের মাঝে সারি গণনা পেতে চান তবে আপনি এটি ব্যবহার করতে পারেন:

df.pipe(len)

উদাহরণ:

row_count = (
      pd.DataFrame(np.random.rand(3,4))
      .reset_index()
      .pipe(len)
)

আপনি যদি এ এর ​​ভিতরে দীর্ঘ বিবৃতি না রাখতে চান তবে এটি কার্যকর হতে পারে len() ফাংশনের ।

আপনি __len__()পরিবর্তে ব্যবহার করতে পারেন তবে __len__()কিছুটা অদ্ভুত দেখাচ্ছে।


এই অপারেশনটি "পাইপ" করতে চাওয়া অর্থহীন বলে মনে হচ্ছে কারণ আপনি এটিতে পাইপ দেওয়ার মতো আর কিছুই নেই (এটি একটি পূর্ণসংখ্যা ফেরত দেয়)। আমি বরং অনেক count = len(df.reset_index())বেশি চাই count = df.reset_index().pipe(len)। প্রাক্তনটি ফাংশন কল ছাড়াই কেবল একটি অ্যাট্রিবিউট লুকআপ।
সিএস 95

1

আরে আপনি এটি ব্যবহার করতে পারেন:

যাক dfআপনার ডেটাফ্রেম। তারপরে df.shapeআপনাকে আপনার ডেটাফ্রেমের আকার দেয় ie(row,col)

সুতরাং, প্রয়োজনীয় পেতে নীচে কমান্ড বরাদ্দ করুন

 row = df.shape[0], col = df.shape[1]

0

ডেটাফ্রেম ডিএফ-এর জন্য ডেটা অন্বেষণের সময় ব্যবহৃত একটি মুদ্রিত কমা বিন্যাসিত সারি গণনা:

def nrow(df):
    print("{:,}".format(df.shape[0]))

উদাহরণ:

nrow(my_df)
12,456,789

0

ডেটাফ্রেমে সারিগুলির পরিমাণ নির্ধারণের একটি বিকল্প পদ্ধতি যা আমি মনে করি যে সর্বাধিক পঠনযোগ্য বৈকল্পিক pandas.Index.size

মনে রাখবেন যে আমি গৃহীত উত্তরের বিষয়ে মন্তব্য করেছি:

সন্দেহজনক pandas.Index.sizeআসলে তুলনায় দ্রুততর হবে len(df.index)তবে timeitআমার কম্পিউটারে আমাকে অন্যথায় বলে (op 150 এনপি লুপ প্রতি ধীর)।


0

আমি নিশ্চিত না যে এটি কাজ করবে কিনা (ডেটা বাদ যাবে) তবে এটি কাজ করতে পারে:

*dataframe name*.tails(1)

এবং তারপরে এটি ব্যবহার করে, আপনি কোড স্নিপেট চালিয়ে এবং আপনাকে দেওয়া সারির নম্বরটি দেখে সারিগুলির সংখ্যা খুঁজে পেতে পারেন।


-2

dfএর যে কোনটি করতে পারে ( ডেটাফ্রেমের নাম):

পদ্ধতি 1: lenফাংশন ব্যবহার :

len(df)নামের ডাটাফ্রেমে সারিগুলির সংখ্যা দেবে df

পদ্ধতি 2: countফাংশন ব্যবহার করে:

df[col].count()প্রদত্ত কলামে সারিগুলির সংখ্যা গণনা করবে col

df.count() সমস্ত কলামের জন্য সারি সংখ্যা দেবে।


3
এটি একটি সূক্ষ্ম উত্তর, তবে ইতিমধ্যে এই প্রশ্নের যথেষ্ট উত্তর রয়েছে, সুতরাং এটি আসলে কিছুই যুক্ত করে না।
জন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.