Сообщество аналитиков и инженеров данных, где ты найдёшь множество интересных трюков, лайфхаков и глубоких инсайтов по работе с Pandas в Python. Всё, что нужно, чтобы усвоить мощь библиотек для анализа данных и автоматизировать рутинные задачи.
От автора лучших курсов по Pandas на Stepik:
⭐️ Основы Pandas для начинающих
https://stepik.org/a/120014
⭐️ Практикум по Pandas
https://stepik.org/a/111629
От автора лучших курсов по Pandas на Stepik:
⭐️ Основы Pandas для начинающих
https://stepik.org/a/120014
⭐️ Практикум по Pandas
https://stepik.org/a/111629
🤩78🥰77👍65🔥51🎉50❤41👏40
Например, если вам нужно сразу создать несколько новых колонок, можно сделать это в одной цепочке.Так вы сможете избежать многочисленных присваиваний и сделать код чище и понятнее.
#лайфхак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍143🎉86🤩81❤71🥰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👏67❤56🎉42👍38
Так каждый элемент в группе получит среднее значение по своей группе в новом столбце.
Было:
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🔥56❤47👍46👏41
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🥰59❤48👏32
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🤩51❤43🔥43
# Предположим, что в 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).
#лайфхак
Please open Telegram to view this post
VIEW IN TELEGRAM
👏97🥰89🔥72👍61🤩61🎉55❤45
Возможно вы помните, что коэффициент лежит в интервале [-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
👍125❤123🥰77🤩73👏54🔥51🎉48
This media is not supported in the widget
VIEW IN TELEGRAM
🥰190🔥107🤩90🎉80❤51👍30👏10😡1