Нашли ошибку?
базовыйpandas 3.0.6

Первичный осмотр

Что сделать первым делом с новой таблицей — посмотреть строки, типы, пропуски, статистику и частоты.

Нужно знать:DataFrame

Содержание статьи

Коротко

  • head(n) / tail(n) — первые / последние строки (по умолчанию 5).
  • shape — размер, columns — имена, dtypes — типы.
  • info() — одним взглядом: типы, число непустых значений в каждом столбце (видно пропуски) и память.
  • describe() — статистика по числовым столбцам; include="all" — по всем.
  • value_counts() — частоты значений столбца, nunique() — число различных значений.

Синтаксис

df.head(5), df.tail(5)
df.shape, df.columns, df.dtypes
df.info()
df.describe(include=None, percentiles=None)
df["col"].value_counts(normalize=False, dropna=True)
df.nunique()

Параметры

ПараметрЧто делаетПо умолчанию
nсколько строк показать в head / tail5
includeв describe: None — только числа, "all" — все столбцы, список типовNone
normalizeв value_counts: доли вместо количествFalse
dropnaв value_counts: не считать NaNTrue

Примеры

Данные для примеровиспользуются во всех примерах ниже
sales = pd.DataFrame({
    "city": ["Омск", "Тула", "Омск", "Сочи", "Тула", "Омск", None],
    "drink": ["латте", "чай", "латте", "раф", "латте", "чай", "латте"],
    "cups": [30, 12, 18, 25, 20, 16, 9],
    "rating": [4.5, 4.0, None, 4.8, 3.9, 4.2, 4.1],
})
Первые и последние строки
print(sales.head(3))
sales.tail(2)
Вывод
   city  drink  cups  rating
0  Омск  латте    30     4.5
1  Тула    чай    12     4.0
2  Омск  латте    18     NaN
   city  drink  cups  rating
5  Омск    чай    16     4.2
6   NaN  латте     9     4.1
Размер и столбцы
print(sales.shape)
sales.columns
Вывод
(7, 4)
Index(['city', 'drink', 'cups', 'rating'], dtype='str')
info: типы и пропуски
sales.info()
Вывод
<class 'pandas.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   city    6 non-null      str
 1   drink   7 non-null      str
 2   cups    7 non-null      int64
 3   rating  6 non-null      float64
dtypes: float64(1), int64(1), str(2)
memory usage: 463.0 bytes
Статистика по числам
sales.describe()
Вывод
            cups    rating
count   7.000000  6.000000
mean   18.571429  4.250000
std     7.253899  0.339116
min     9.000000  3.900000
25%    14.000000  4.025000
50%    18.000000  4.150000
75%    22.500000  4.425000
max    30.000000  4.800000
Статистика по всем столбцам
sales.describe(include="all")
Вывод
        city  drink       cups    rating
count      6      7   7.000000  6.000000
unique     3      3        NaN       NaN
top     Омск  латте        NaN       NaN
freq       3      4        NaN       NaN
mean     NaN    NaN  18.571429  4.250000
std      NaN    NaN   7.253899  0.339116
min      NaN    NaN   9.000000  3.900000
25%      NaN    NaN  14.000000  4.025000
50%      NaN    NaN  18.000000  4.150000
75%      NaN    NaN  22.500000  4.425000
max      NaN    NaN  30.000000  4.800000
Частоты значений
print(sales["city"].value_counts())
sales["city"].value_counts(normalize=True).round(2)
Вывод
city
Омск    3
Тула    2
Сочи    1
Name: count, dtype: int64
city
Омск    0.50
Тула    0.33
Сочи    0.17
Name: proportion, dtype: float64
Сколько различных значений
sales.nunique()
Вывод
city      3
drink     3
cups      7
rating    6
dtype: int64

Подводные камни

value_counts не показывает пропуски

Строки с NaN по умолчанию не считаются, и сумма частот меньше числа строк. Чтобы увидеть пропуски, передайте dropna=False.

Частоты вместе с NaN
sales["city"].value_counts(dropna=False)
Вывод
city
Омск    3
Тула    2
Сочи    1
NaN     1
Name: count, dtype: int64

describe без текстовых столбцов

По умолчанию describe молча пропускает нечисловые столбцы — в примере выше нет city и drink. Для них — include="all" или value_counts.