Πώς μπορώ να λάβω τον αριθμό γραμμών ενός πλαισίου δεδομένων pandas DataFrame;

Προσπαθώ να πάρω τον αριθμό των γραμμών του πλαισίου δεδομένων df με Pandas, και εδώ είναι ο κώδικάς μου.

Μέθοδος 1:

total_rows = df.count
print total_rows +1

Μέθοδος 2:

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

Και τα δύο αποσπάσματα κώδικα μου δίνουν αυτό το σφάλμα:

TypeError: unsupported operand type(s) for +: 'instancemethod' and 'int&#39,

Τι κάνω λάθος;

Λύση

Μπορείτε να χρησιμοποιήσετε την ιδιότητα .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)

[]]1

EDIT: Όπως σημείωσε ο @Dan Allen στα σχόλια, τα len(df.index) και df[0].count() δεν είναι εναλλάξιμα, καθώς το count αποκλείει το NaN,

Σχόλια (10)

Χρησιμοποιήστε len(df). Αυτό λειτουργεί από την pandas 0.11 ή ίσως και νωρίτερα.

Η __len__() τεκμηριώνεται επί του παρόντος (0.12) με την ονομασία Returns length of index. Πληροφορίες χρονισμού, ρυθμίστε με τον ίδιο τρόπο όπως στην απάντηση της root's:

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), αλλά αυτό δεν θα πρέπει να παίζει κανένα ρόλο στις περισσότερες περιπτώσεις χρήσης.

Σχόλια (0)

Εκτός από τις παραπάνω απαντήσεις, μπορείτε να χρησιμοποιήσετε την df.axes για να λάβετε την πλειάδα με τους δείκτες γραμμής και στήλης και στη συνέχεια να χρησιμοποιήσετε τη συνάρτηση len():

total_rows=len(df.axes[0])
total_cols=len(df.axes[1])
Σχόλια (1)