Фабрика DataFrames 🐼
319 subscribers
6 photos
1 link
Сообщество аналитиков и инженеров данных на Python. Короткие и мощные хитрости в Pandas для быстрого анализа и автоматизации рутины ждут в канале. Присоединяйся и начни экономить время уже сегодня!
Download Telegram
Сообщество аналитиков и инженеров данных, где ты найдёшь множество интересных трюков, лайфхаков и глубоких инсайтов по работе с Pandas в Python. Всё, что нужно, чтобы усвоить мощь библиотек для анализа данных и автоматизировать рутинные задачи.

От автора лучших курсов по Pandas на Stepik:

⭐️ Основы Pandas для начинающих
https://stepik.org/a/120014

⭐️ Практикум по Pandas
https://stepik.org/a/111629
🤩78🥰77👍65🔥51🎉5041👏40
⚡️Добавляйте новые столбцы «на лету», используя метод assign().

Например, если вам нужно сразу создать несколько новых колонок, можно сделать это в одной цепочке.Так вы сможете избежать многочисленных присваиваний и сделать код чище и понятнее.

#лайфхак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🎉86🤩8171🥰68🔥35👏19
⚡️Для удобной фильтрации данных вместо классического:
df[(df['col1'] == 1) & (df['col2'] == 2)]


можно использовать метод query():
df.query('col1 == 1 & col2 == 2')


Так код получается короче и легче читается.

#лайфхак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83🤩73🥰72👏6756🎉42👍38
⚡️Если нужно вычислить статистику и записать её в каждый элемент группы, воспользуйтесь transform().

Так каждый элемент в группе получит среднее значение по своей группе в новом столбце.
Было:
group_col target_col
0 A 10
1 A 20
2 B 30
3 B 40
4 B 50

Станет:
group_col target_col mean_value
0 A 10 15.0
1 A 20 15.0
2 B 30 40.0
3 B 40 40.0
4 B 50 40.0


#лайфхак
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰84🎉83🤩67🔥5647👍46👏41
⚡️Если в одной ячейке хранится список значений, а вам нужен отдельный ряд для каждого элемента, используйте метод explode():
df.explode('list_column')


Так можно «развернуть» списки в столбце в отдельные строки.
Было:
id list_column
0 1 [10, 20, 30]
1 2 [40, 50]

Станет:
id list_column
0 1 10
0 1 20
0 1 30
1 2 40
1 2 50


#лайфхак
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉200🔥98👍96🤩61🥰5948👏32
⚡️Используйте метод pipe(), чтобы связать несколько нестандартных преобразований DataFrame в одну цепочку, сохраняя код чистым и читаемым.
import pandas as pd

# Исходный DataFrame
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': [10, 20, 30, 40]
})

# Наша функция: умножаем столбец 'A' на 2
def multiply_A(data):
data['A'] = data['A'] * 2
return data

# Применяем pipe: сначала умножаем 'A', затем создаём новый столбец 'C' как сумму 'A' и 'B'
df = (df
.pipe(multiply_A)
.pipe(lambda d: d.assign(C=d['A'] + d['B'])))

Так можно элегантно комбинировать несколько операций без временных переменных.

#лайфхак
Please open Telegram to view this post
VIEW IN TELEGRAM
👏134🎉129🥰86👍52🤩5143🔥43
⚡️Иногда DataFrame оказывается неожиданно «тяжёлым», и вы начинаете замечать снижение скорости или недостаток памяти. Чтобы найти самые «прожорливые» колонки:
# Предположим, что в df есть колонки A, B, C, тогда
mem_info = df.memory_usage(deep=True) / (1024**2)

print(mem_info.round(2))

Результат:

Index 1.00 # индекс 1 МБ
A 0.40 # 400 КБ
B 3.00 # 3 МБ
C 0.00 # менее 50 КБ
dtype: float64


Теперь легко увидеть в мегабайтах, какой столбец требует больше всего ресурсов и при необходимости оптимизировать его (например, перевести строки в category).

Подумайте и напишите, почему мы делим на (1024**2) и что делать, если хочется вывести в килобайтах или гигабайтах?

#лайфхак
Please open Telegram to view this post
VIEW IN TELEGRAM
👏97🥰89🔥72👍61🤩61🎉5545
☄️ Сейчас в Pandas есть интересный баг с корреляцией Пирсона

Возможно вы помните, что коэффициент лежит в интервале [-1, 1]. Но если вы считаете корреляцию через corr(), то рискуете получить некорректный результат:
data = pd.DataFrame(dict(
x=[0, 1],
y=[1.35951, 1.3595100000000007]
))
data.corr()

    x      y
x 1 1.15
y 1.15 1


Как видите - корреляция между x и y равна 1.15, но как такое получилось?

Это происходит из-за маленьких неточностей (ошибок округления), которые накапливаются при операциях с числами с плавающей точкой. А вот corrcoef из numpy в этом случае приводит коэффициент к границе интервала
np.corrcoef(data)

array([[1., 1.],
[1., 1.]])


В целом ничего страшного, просто учтите, что такое может быть из-за бага. Кстати, исправление должно быть включено ближайшее обновление, а пока будьте внимательны 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125123🥰77🤩73👏54🔥51🎉48
This media is not supported in the widget
VIEW IN TELEGRAM
🥰190🔥107🤩90🎉8051👍30👏10😡1