Як я можу отримати кількість рядків панд DataFrame?
Ця таблиця підсумовує різні ситуації, в яких ви хочете щось порахувати у DataFrame (або серії для повноти), а також рекомендовані методи.
Виноски
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
Здається порівняти ефективність операцій з постійним часом, особливо, коли різниця знаходиться на рівні "серйозно, не турбуйся про це". Але це, здається, є тенденцією з іншими відповідями, тому я роблю те саме для повноти.
З трьох вищевказаних методів 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
поверне нелінійні підрахунки для кожного стовпця:
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
повертається a . Це має сенс дляDataFrames
того, що всі групи мають однаковий підрахунок рядків.
Груповий ненульовий ряд рядків: GroupBy.count
Подібно до вище, але використовувати GroupBy.count
, ні GroupBy.size
. Зауважте, що size
завжди повертає a Series
, а count
повертає a, Series
якщо викликається у певному стовпці, або 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, в / с,
df.groupby('A')['B'].count()
A
a 2
b 1
c 0
Name: B, dtype: int64
Викликається в конкретній колонці.