Skip to content

Упражнение Pandas для специалистов по данным — часть 2

Пересказ статьи Avi Chawla. Pandas Exercise for Data Scientists — Part 2


Библиотека Pandas всегда привлекала специалистов по данным своими изумительными возможностями. Она несомненно является важным инструментом для обработки и манипуляции данными.

Поэтому для расширения ваших экспертных знаний и знакомства с огромным числом популярных среди специалистов по данным функций Pandas я представляю вторую часть "Упражнение Pandas". Первую часть вы можете найти по ссылке.
Целью статьи является помощь в освоении методов манипулирования данными с помощью одного из лучших пакетов Python для анализа данных.

notebook со всеми вопросами по этой статье можно найти на GitHub.

Содержание


  1. Накопительная сумма в столбце фрейма данных

  2. Присвоение уникального идентификатора каждой группе

  3. Проверить, содержит ли столбец значения NaN

  4. Добавить список в качестве строки в фрейм данных

  5. Получить первую строку для каждого уникального значения в столбце

  6. Определить источник каждой строки в Pandas Merge

  7. Отфильтровать n наибольших и n наименьших значений в фрейме данных

  8. Сопоставить категориальные данные уникальным целым значениям

  9. Добавить префикс к имени каждого столбца

  10. Преобразовать категориальные столбцы в одно «горячее» значение

В качестве упражнения я рекомендую попытаться самим решить задачу, а затем посмотреть решение, которое я привожу.

Имейте в виду, что приводимые мной решения не являются единственным способом решить задачу. Вы можете получить в чем-то отличное и тем не менее правильное решение. В таком случае поделитесь им в комментариях.

Итак, начинаем!

1. Накопительная сумма столбца в фрейме данных


Задание: Дан фрейм данных. Вам нужно сгенерировать из исходного столбца новый столбец, представляющий накопительную сумму столбца.

Ввод и ожидаемый вывод

import pandas as pd
df = pd.DataFrame([["A", 1], ["B", 2], ["C", 3], ["D", 4]],
columns=["col_A", "col_B"])
output_df = # здесь ваш код
"""
col_A col_B col_C
0 A 1 1
1 B 2 3
2 C 3 6
3 D 4 10
"""

Решение:

Здесь мы можем использовать метод cumsum() на заданном ряде и получить накопительную сумму, как показано ниже:

import pandas as pd
...
df["col_C"] = df.col_B.cumsum()
"""
col_A col_B col_C
0 A 1 1
1 B 2 3
2 C 3 6
3 D 4 10
"""

P.S. Можете вы также попробовать получить накопительное произведение, накопительный максимум и накопительный минимум?

2. Присвоение уникальных идентификаторов каждой группе


Задание: Теперь в вашем фрейме есть один столбец, который содержит повторяющиеся значения. Требуется сгенерировать новый ряд так, чтобы каждая группа получила уникальный номер.

Ввод и ожидаемый вывод:

Ниже значению "A" в col_A было присвоено значение 1 в новом ряде. Далее для каждого вхождения "A" значение в столбце group_num будет всегда 1.

import pandas as pd
df = pd.DataFrame([["A", 1], ["B", 2], ["A", 3], ["D", 4]],
columns=["col_A", "col_B"])
new_df = ## здесь ваш код
"""
col_A col_B group_num
0 A 1 1
1 B 2 2
2 A 3 1
3 D 4 3
"""

Решение:

Здесь после group_by вы можете использовать метод grouper.group_info, как показано ниже:

import pandas as pd
...
df["group_num"] = df.groupby("col_A").grouper.group_info[0] + 1
"""
col_A col_B group_num
0 A 1 1
1 B 2 2
2 A 3 1
3 D 4 3
"""

3. Проверить, содержит ли столбец значения NaN


Задание: Теперь вам нужно определить, присутствует ли значение NaN в столбце или нет. Вам не требуется находить число значений NaN или что-либо еще, а только True или False как ответ, имеется одно или более значений NaN в столбце.

Ввод и ожидаемый вывод:

import pandas as pd
df = pd.DataFrame([["A", np.NaN], ["A", 2], ["C", np.NaN], ["D", 4]],
columns=["col_A", "col_B"])
col_A_check = ## здесь ваш код
# False
col_B_check = ## здесь ваш код
# True

Решение:

Здесь мы можем использовать метод hasnans для ряда, чтобы получить желаемый результат, как показано ниже:

import pandas as pd
...
col_A_check = df.col_A.hasnans
# False
col_B_check = df.col_B.hasnans
# True

4. Добавить список как строку в фрейм данных


Задание: Каждый знает, как добавить элементы в список Python (применение метода append к списку). Но добавляли ли вы новую строку к фрейму данных? В следующем задании вам дается фрейм данных и список, который следует добавить в качестве новой строки в фрейм данных.

Ввод и ожидаемый вывод:

import pandas as pd
df = pd.DataFrame([["A", 1], ["B", 2], ["C", 3], ["D", 4]],
columns=["col_A", "col_B"])
new_row = ["E", 5]
new_df = ## здесь ваш код
"""
col_A col_B
0 A 1
1 B 2
2 C 3
3 D 4
4 E 5
"""

Решение:

Здесь мы можем использовать loc и присвоить новому индексу в фрейме данных новую строку, как показано ниже:

import pandas as pd
...
df.loc[df.shape[0]] = new_row
"""
col_A col_B
0 A 1
1 B 2
2 C 3
3 D 4
4 E 5
"""

5. Получить первую строку для каждого уникального значения в столбце


Задание: Дан фрейм данных, требуется получить всю строку для первого вхождения каждого уникального элемента в столбце col_A.

Ввод и ожидаемый вывод:

import pandas as pd
df = pd.DataFrame([["A", 1], ["B", 2], ["A", 3], ["D", 4]],
columns=["col_A", "col_B"])
new_df = ## здесь ваш код
"""
col_A col_B
0 A 1
1 B 2
2 D 4
"""

Решение:

Здесь мы будем использовать GroupBy на заданном столбце и получаем первую строку, как показано ниже:

import pandas as pd
...
df.groupby("col_A").first()
"""
col_A col_B
0 A 1
1 B 2
2 D 4
"""

6. Определить источник каждой строки в Pandas Merge


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

Ввод и ожидаемый вывод:

import pandas as pd
df1 = pd.DataFrame([["A", 1], ["B", 2]],
columns=["col_A", "col_B"])
df2 = pd.DataFrame([["A", 3], ["C", 4]],
columns=["col_A", "col_C"])
df = ## здесь ваш код
"""
col_A col_B col_C _merge
0 A 1 3.0 оба
1 B 2 NaN только_левый
"""

Решение:

Мы можем использовать метод merge и передать аргумент indicator со значением True, как показано ниже:

import pandas as pd
...
df = pd.merge(df1, df2, how = "left", indicator = True)
"""
col_A col_B col_C _merge
0 A 1 3.0 оба
1 B 2 NaN только_левый
"""

7. Отфильтровать n наибольших и n наименьших значений в фрейме данных


Задание: В этом упражнении задан фрейм данных. Требуется получить целую строку, у которой значение col_B является одним из k наибольших величин столбца.

Ввод и ожидаемый вывод:
import pandas as pd
df = pd.DataFrame([["A", 200], ["B", 400], ["C", 100], ["D", 300]],
columns=["col_A", "col_B"])
k = 2
new_df = ## здесь ваш код
"""
col_A col_B
1 B 400
3 D 300
"""

Решение:

Мы можем использовать метод nlargest и передать число требуемых наибольших значений из заданного столбца:

import pandas as pd
...
new_df = df.nlargest(n=k, columns="col_B")
"""
col_A col_B
1 B 400
3 D 300
"""

Аналогичным образом вы можете использовать метод nsmallest для получения k наименьших значений в столбце.

8. Отображение категориальных данных в уникальные интегральные значения


Задание: Дан фрейм данных; требуется сопоставить каждое уникальное значение столбца уникальному интегральному идентификатору.

Ввод и ожидаемый вывод:

import pandas as pd
df = pd.DataFrame([["A", 1], ["B", 2],
["A", 3], ["D", 4]],
columns=["col_A", "col_B"])
df = ## здесь ваш код
"""
col_A col_B new_col
0 A 1 0
1 B 2 1
2 A 3 0
3 D 4 2
"""

Решение:

Используя метод pd.factorize вы можете сгенерировать новый ряд, который представляет собой целочисленные кодировки заданного столбца.

import pandas as pd
...
df["new_col"] = pd.factorize(df.col_A)[0]
"""
col_A col_B new_col
0 A 1 0
1 B 2 1
2 A 3 0
3 D 4 2
"""

9. Добавить префикс к имени каждого столбца


Задание: Как и для предыдущих задач, вам предоставляется фрейм данных. Требуется переименовать все столбцы, добавив префикс "pre_" к каждому из них.

Ввод и ожидаемый вывод:

import pandas as pd
df = pd.DataFrame([["A", 1], ["B", 2], ["C", 3], ["D", 4]],
columns=["col_A", "col_B"])
new_df = ## здесь ваш код
"""
pre_col_A pre_col_B
0 A 1
1 B 2
2 C 3
3 D 4
"""

Решение:

Здесь мы можем использовать метод add_prefix и передать строку, которую хотим использовать в качестве префикса во всех именах столбцов, как показано ниже:

import pandas as pd
...
df.add_prefix("pre_")
"""
pre_col_A pre_col_B
0 A 1
1 B 2
2 C 3
3 D 4
"""

10. Преобразовать категориальные столбцы к одним "горячим" значениям


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

Ввод и ожидаемый вывод:
import pandas as pd
df = pd.DataFrame([["A"], ["B"], ["C"], ["A"]],
columns=["col_A"])
new_df = ## здесь ваш код
"""
A B C
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
"""

Решение:

Здесь мы можем использовать метод get_dummies и передать ряд в качестве аргумента, что показано ниже:

import pandas as pd
...
new_df = pd.get_dummies(df.col_A)
"""
A B C
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0
"""

Ссылки по теме:
1. Практический анализ данных с Pandas
2. Команды Pandas, которые я часто использую для анализа данных

Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.