Анализ DataFrame

«Анализ» в Pandas — это набор стандартных шагов EDA (exploratory data analysis): посмотреть на форму, типы, статистику, распределение значений, уникальные категории. Несколько встроенных методов закрывают 80% этой работы.

Когда использовать

  • Только получили новый лог — нужно понять, что в нём.

  • Сравниваете два датасета между собой.

  • Готовите данные к моделированию и хотите быстро увидеть «странности».

Пример 1. Размер и колонки

import pandas as pd

df = pd.DataFrame({
    "device": ["bot1", "bot2", "bot3"],
    "temp": [22, 35, 41],
    "ok": [True, False, True],
})
print("shape:", df.shape)
print("columns:", list(df.columns))

Output:

shape: (3, 3)
columns: ['device', 'temp', 'ok']

Пример 2. info

import pandas as pd

df = pd.DataFrame({"a": [1, 2], "b": ["x", "y"]})
df.info()

Output:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   a       2 non-null      int64
 1   b       2 non-null      object
dtypes: int64(1), object(1)
memory usage: 160.0+ bytes

Пример 3. describe

import pandas as pd

df = pd.DataFrame({"temp": [22, 35, 41, 28]})
print(df.describe())

Output:

            temp
count   4.000000
mean   31.500000
std     8.300000
min    22.000000
25%    26.500000
50%    31.500000
75%    36.500000
max    41.000000

Пример 4. describe(include="all")

import pandas as pd

df = pd.DataFrame({"device": ["a", "b", "a"], "v": [1, 2, 3]})
print(df.describe(include="all"))

Output:

       device         v
count       3  3.000000
unique      2       NaN
top         a       NaN
freq        2       NaN
mean      NaN  2.000000
...

Пример 5. value_counts

import pandas as pd

df = pd.DataFrame({"device": ["bot1", "bot2", "bot1", "bot1", "bot2", "bot3"]})
print(df["device"].value_counts())

Output:

device
bot1    3
bot2    2
bot3    1
Name: count, dtype: int64

Пример 6. nunique и unique

import pandas as pd

df = pd.DataFrame({"device": ["bot1", "bot2", "bot1"]})
print("уникальных:", df["device"].nunique())
print("значения:", df["device"].unique())

Output:

уникальных: 2
значения: ['bot1' 'bot2']

Пример 7. head / tail / sample

import pandas as pd

df = pd.DataFrame({"v": range(10)})
print(df.head(3))
print(df.tail(2))
print(df.sample(2, random_state=42))

Output:

   v
0  0
1  1
2  2
   v
8  8
9  9
   v
1  1
8  8

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

  • describe по умолчанию игнорирует нечисловые столбцы — добавляйте include="all".

  • info не показывает реальное использование памяти для object — df.memory_usage(deep=True) точнее.

  • value_counts(dropna=False) покажет, сколько NaN в колонке.

См. также

Примечание

Лицензия и источники

Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.