Как получить количество строк фрейма данных 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
исключить NaN
s,
предположим df
ваш фрейм данных тогда:
count_row = df.shape[0] # gives number of row count
count_col = df.shape[1] # gives number of col count
использовать len(df)
. Это работает с pandas 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
фон, и я вижу, что панды гораздо сложнее, когда дело доходит до выбора строки или столбца.
Некоторое время я боролся с этим, потом нашел способ справиться с этим:--4-->
получение количества столбцов:
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.
...дом на Ян-Филипп ответа Gehrcke по.
почему len(df)
или len(df.index)
быстрее df.shape[0]
. Посмотри на код. пеленгатор.форма @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]
df.shape
возвращает форму фрейма данных в виде кортежа (no. из рядов-нет. из седла).
вы можете просто получить доступ нет. из рядов или нет. столбцов с 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