Как я могу получить количество строк в DataFrame панд?
Эта таблица суммирует различные ситуации, в которых вы хотите подсчитать что-либо в DataFrame (или Series, для полноты), а также рекомендуемые методы.
Сноски
DataFrame.count
возвращает счетчики для каждого столбца как, Series
поскольку ненулевое значение зависит от столбца.
DataFrameGroupBy.size
возвращает a Series
, поскольку все столбцы в одной группе имеют одинаковое количество строк.
DataFrameGroupBy.count
возвращает a 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
является атрибутом и возвращает количество элементов (= количество строк для любой серии). DataFrames также определяют атрибут размера, который возвращает тот же результат, что и df.shape[0] * df.shape[1]
.
Счетчик ненулевых строк: DataFrame.count
иSeries.count
Методы, описанные здесь, учитывают только ненулевые значения (то есть NaN игнорируются).
Вызов DataFrame.count
будет возвращать количество не-NaN для каждого столбца:
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
всегда возвращает a Series
, в то время как count
возвращает Series
if, если вызывается для определенного столбца, или же a 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
... вызывается для всего объекта GroupBy, v / s,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Вызывается в определенном столбце.