Анализ 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.