Я пытаюсь получить количество строк в df с помощью Pandas, и вот мой код.

Способ 1:

total_rows = df.count
print total_rows +1

Способ 2:

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

Оба фрагмента кода дают мне эту ошибку:

Ошибка типа: неподдерживаемые типы операндов для +: 'instancemethod' и 'int'

Что я делаю не так?

867
yemu 11 Апр 2013 в 12:14

10 ответов

Лучший ответ

Вы можете использовать свойство .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)

enter image description here

РЕДАКТИРОВАТЬ: Как @Dan Аллен отметил в комментариях len(df.index) и df[0].count() не являются взаимозаменяемыми, поскольку count исключает NaN с,

1143
halloleo 18 Сен 2018 в 05:29

Альтернативный метод определения количества строк в кадре данных, который, на мой взгляд, является наиболее читаемым, - это pandas.Index.size.

Обратите внимание, что, как я прокомментировал принятый ответ:

Подозреваемый pandas.Index.size будет на самом деле быстрее, чем len(df.index), но timeit на моем компьютере говорит мне иначе (~ 150 нс медленнее за цикл).

0
jorijnsmit 24 Фев 2020 в 15:14

... основываясь на ответе Яна-Филиппа Герке.

Причина, по которой len(df) или len(df.index) быстрее, чем df.shape[0]. Посмотри на код. df.shape - это @property, который запускает метод DataFrame, вызывающий 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)

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]

9
debo 7 Дек 2017 в 23:37

Я пришел к пандам из 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.
7
Catbuilts 29 Сен 2016 в 07:41

Используйте len(df). Это работает с пандами 0.11 или, может быть, даже раньше.

__len__() в настоящее время (0.12) задокументировано с Returns length of index. Информация о времени, настраивается так же, как в ответе root:

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), но это не должно играть никакой роли в большинстве случаев использования.

135
Dr. Jan-Philip Gehrcke 19 Авг 2013 в 15:10

Помимо приведенных выше ответов используйте команду df.axes, чтобы получить кортеж с индексами строк и столбцов, а затем используйте функцию len():

total_rows=len(df.axes[0])
total_cols=len(df.axes[1])
19
skuntsel 19 Авг 2015 в 19:28

Если вы хотите получить количество строк в середине цепочечной операции, вы можете использовать:

df.pipe(len)

Примере:

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

Это может быть полезно, если вы не хотите помещать длинный оператор в функцию len ().

Вместо этого вы можете использовать __len __ (), но __len __ () выглядит немного странно.

2
Allen 22 Фев 2018 в 02:58

Для фрейма данных df счетчик строк в формате запятой используется при исследовании данных:

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

Примере:

nrow(my_df)
12,456,789
0
Vlad 21 Сен 2017 в 01:59

len() - ваш друг, краткий ответ для количества строк - len(df).

Кроме того, вы можете получить доступ ко всем строкам с помощью df.index и ко всем столбцам с помощью df.columns, и так как вы можете использовать len(anyList) для получения списка, следовательно, вы можете использовать len(df.index) для получения количества строк и len(df.columns) для количества столбцов.

В качестве альтернативы, вы можете использовать df.shape, который возвращает количество строк и столбцов вместе, если вы хотите получить доступ к количеству строк, используйте только df.shape[0] и только для количества столбцов: df.shape[1] ,

26
Memin 28 Ноя 2018 в 14:45

Предположим, что 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
272
cs95 24 Май 2019 в 03:53