Сообщество аналитиков и инженеров данных, где ты найдёшь множество интересных трюков, лайфхаков и глубоких инсайтов по работе с 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
How can I iterate over rows in a Pandas DataFrame?
(Как я могу пройтись по строкам датафрейма?)
Классический вопрос об итерации по строкам DataFrame. Несмотря на то, что прямой обход строк не рекомендуется из-за низкой скорости, этот вопрос набрал рекордное число просмотров и голосов.
Да, при работе с DataFrame иногда нужно обойти строки для выполнения отдельных операций. Один из простых способов – использовать метод iterrows(), который возвращает индекс и строку в виде Series.
Однако для больших датафреймов лучше использовать itertuples() или векторизированные операции для оптимизации скорости
Please open Telegram to view this post
VIEW IN TELEGRAM
👏146🤩101🥰84👍75🎉70❤59🔥46
Библиотека была создана Уэсом МакКинни (Wes McKinney) около 2008 года, когда он работал в хедж-фонде AQR. Ему требовался удобный инструмент для быстрой и гибкой работы с данными в Python, особенно с табличными (как в Excel) и временными рядами
Название происходит не столько от симпатичного медведя, сколько от сочетания слов panel data (термин в эконометрике для многомерных временных рядов), и Python data analysis (Python для анализа данных).
Изначально это был закрытый корпоративный инструмент, но вскоре Уэс МакКинни решил открыть исходный код, чтобы помочь Python-сообществу в анализе данных.
Получается, что за милым названием pandas стоит серьёзная эконометрическая основа и практические нужды хедж-фонда, а «медвежья» ассоциация оказалась просто приятным бонусом, который легко запоминается
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉127👍105🤩102🔥86🥰64👏33❤30
SettingWithCopy в Pandas — это предупреждение, возникающее, когда ты пытаешься изменить фрагмент датафрейма, и непонятно, изменится ли оригинал или только его копия.
Я же работал в отдельном датафрейме, почему мои данные изменились в исходном датафрейме тоже?
Представь такую ситуацию:
Ты берёшь кусочек большой таблицы и меняешь значения в нём:
df_small = df_big[df_big['A'] > 5]
df_small['B'] = 100
Pandas не может понять, хочешь ли ты изменить только кусочек отдельно или изменить исходную таблицу. Поэтому возникает предупреждение:
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Оно говорит тебе:
Ты точно хочешь изменить этот кусок отдельно? Или хотел поменять исходную таблицу?
Это предупреждение важно, потому что часто неясно, работаешь ты с копией (отдельным объектом в памяти) или представлением (view — ссылается на те же данные). Поведение зависит от внутренней реализации Pandas и устройства памяти твоего датафрейма, что делает результат неочевидным и непредсказуемым для нас
Почему это проблема?
- Если это копия, то изменения никак не повлияют на исходный датафрейм.
- Если это представление (view), то изменения применятся и к исходной таблице тоже
Без явного указания, что именно ты хочешь сделать, Pandas теряется, а это может привести к неожиданным ошибкам.
Как избежать SettingWithCopy?
Самое простое и правильное решение — явно указать Pandas, что ты хочешь делать копию данных:
df_small = df_big[df_big['A'] > 5].copy()
df_small['B'] = 100
Используя .copy(), ты чётко показываешь, что хочешь создать отдельную копию, и Pandas больше не будет показывать предупреждения.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩143🥰107❤100🔥89🎉83👍68👏34