Как получить количество строк в кадре данных Pandas?
Я пытаюсь получить количество строк dataframe df с пандами, и вот мой код.
Способ 1:
total_rows = df.count
print total_rows +1
Способ 2:
total_rows = df['First_columnn_label'].count
print total_rows +1
оба фрагмента кода дают мне эту ошибку:
TypeError: неподдерживаемые типы операндов для+: 'instancemethod ' и'int'
что я делаю не так?
По данным ответ дано @ root лучший (the самый быстрый) способ проверить длину df-это позвонить:
df.shape[0]
12 ответов:
можно использовать
.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)
EDIT: как отметил @Dan Allen в комментариях
len(df.index)иdf[0].count()не заменимы какcountисключитьNaNs,
предположим
dfэто ваш фрейм данных тогда:count_row = df.shape[0] # gives number of row count count_col = df.shape[1] # gives number of col count
использовать
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)напрямую, но это не должно играть никакой роли в большинстве случаев.
помимо вышеуказанных ответов использование может использовать
df.axesчтобы получить кортеж с индексами строк и столбцов, а затем использоватьlen()функция:total_rows=len(df.axes[0]) total_cols=len(df.axes[1])
для получения строк, используйте
df.indexи для столбцов, используйте
df.columnsвы всегда можете использовать
len(anyList)для получения количества списка, следовательно, вы можете использоватьlen(df.index)для получения количества строк, или короче попробоватьlen(df)количество строк.в качестве альтернативы вы можете использовать
df.shape[0] and df.shape[1]для получения количества строк и столбцов, соответственно.
Я пришел к панд из
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.
...основываясь на ответе Яна-Филиппа Герке.
почему
len(df)илиlen(df.index)быстрееdf.shape[0]. Посмотри на код. пеленгатор.форма-это@propertyкоторый выполняет вызов метода DataFramelenдва раза.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)и под капотом len (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]
df.shapeвозвращает форму фрейма данных в виде кортежей (нет. из рядов-нет. из седла).вы можете просто получить доступ нет. из рядов или нет. Колс с
df.shape[0]илиdf.shape[1], соответственно, что совпадает с доступом к значениям кортежа.
в случае, если вы хотите получить количество строк в середине цепочки, вы можете использовать:
df.pipe(len)пример:
row_count = ( pd.DataFrame(np.random.rand(3,4)) .reset_index() .pipe(len) )Это может быть полезно, если вы не хотите помещать длинный оператор внутри функции len ().
вы могли бы использовать __len__() вместо этого, но __len__ () выглядит немного странно.
для dataframe df, количество строк в формате печатной запятой используется при изучении данных:
def nrow(df): print("{:,}".format(df.shape[0]))пример:
nrow(my_df) 12,456,789

Comments