Упражнение Pandas для специалистов по данным — часть 2
Пересказ статьи Avi Chawla. Pandas Exercise for Data Scientists — Part 2
Библиотека Pandas всегда привлекала специалистов по данным своими изумительными возможностями. Она несомненно является важным инструментом для обработки и манипуляции данными.
Поэтому для расширения ваших экспертных знаний и знакомства с огромным числом популярных среди специалистов по данным функций Pandas я представляю вторую часть "Упражнение Pandas". Первую часть вы можете найти по ссылке.
Целью статьи является помощь в освоении методов манипулирования данными с помощью одного из лучших пакетов Python для анализа данных.
notebook со всеми вопросами по этой статье можно найти на GitHub.
В качестве упражнения я рекомендую попытаться самим решить задачу, а затем посмотреть решение, которое я привожу.
Имейте в виду, что приводимые мной решения не являются единственным способом решить задачу. Вы можете получить в чем-то отличное и тем не менее правильное решение. В таком случае поделитесь им в комментариях.
Итак, начинаем!
Задание: Дан фрейм данных. Вам нужно сгенерировать из исходного столбца новый столбец, представляющий накопительную сумму столбца.
Ввод и ожидаемый вывод
Решение:
Здесь мы можем использовать метод cumsum() на заданном ряде и получить накопительную сумму, как показано ниже:
P.S. Можете вы также попробовать получить накопительное произведение, накопительный максимум и накопительный минимум?
Задание: Теперь в вашем фрейме есть один столбец, который содержит повторяющиеся значения. Требуется сгенерировать новый ряд так, чтобы каждая группа получила уникальный номер.
Ввод и ожидаемый вывод:
Ниже значению "A" в col_A было присвоено значение 1 в новом ряде. Далее для каждого вхождения "A" значение в столбце group_num будет всегда 1.
Решение:
Здесь после group_by вы можете использовать метод grouper.group_info, как показано ниже:
Задание: Теперь вам нужно определить, присутствует ли значение NaN в столбце или нет. Вам не требуется находить число значений NaN или что-либо еще, а только True или False как ответ, имеется одно или более значений NaN в столбце.
Ввод и ожидаемый вывод:
Решение:
Здесь мы можем использовать метод hasnans для ряда, чтобы получить желаемый результат, как показано ниже:
Задание: Каждый знает, как добавить элементы в список Python (применение метода append к списку). Но добавляли ли вы новую строку к фрейму данных? В следующем задании вам дается фрейм данных и список, который следует добавить в качестве новой строки в фрейм данных.
Ввод и ожидаемый вывод:
Решение:
Здесь мы можем использовать loc и присвоить новому индексу в фрейме данных новую строку, как показано ниже:
Задание: Дан фрейм данных, требуется получить всю строку для первого вхождения каждого уникального элемента в столбце col_A.
Ввод и ожидаемый вывод:
Решение:
Здесь мы будем использовать GroupBy на заданном столбце и получаем первую строку, как показано ниже:
Задание: Теперь представьте, что у вас есть два фрейма данных. Требуется соединить их так, чтобы в выводе был столбец, обозначающий источник строки из исходного фрейма данных.
Ввод и ожидаемый вывод:
Решение:
Мы можем использовать метод merge и передать аргумент indicator со значением True, как показано ниже:
Задание: В этом упражнении задан фрейм данных. Требуется получить целую строку, у которой значение col_B является одним из k наибольших величин столбца.
Ввод и ожидаемый вывод:
Решение:
Мы можем использовать метод nlargest и передать число требуемых наибольших значений из заданного столбца:
Аналогичным образом вы можете использовать метод nsmallest для получения k наименьших значений в столбце.
Задание: Дан фрейм данных; требуется сопоставить каждое уникальное значение столбца уникальному интегральному идентификатору.
Ввод и ожидаемый вывод:
Решение:
Используя метод pd.factorize вы можете сгенерировать новый ряд, который представляет собой целочисленные кодировки заданного столбца.
Задание: Как и для предыдущих задач, вам предоставляется фрейм данных. Требуется переименовать все столбцы, добавив префикс "pre_" к каждому из них.
Ввод и ожидаемый вывод:
Решение:
Здесь мы можем использовать метод add_prefix и передать строку, которую хотим использовать в качестве префикса во всех именах столбцов, как показано ниже:
Задание: Наконец, дан категориальный столбец в фрейме данных. Требуется преобразовать его к одним горячим значениям.
Ввод и ожидаемый вывод:
Решение:
Здесь мы можем использовать метод get_dummies и передать ряд в качестве аргумента, что показано ниже:
Ссылки по теме:
1. Практический анализ данных с Pandas
2. Команды Pandas, которые я часто использую для анализа данных
notebook со всеми вопросами по этой статье можно найти на GitHub.
Содержание
- Накопительная сумма в столбце фрейма данных
- Присвоение уникального идентификатора каждой группе
- Проверить, содержит ли столбец значения NaN
- Добавить список в качестве строки в фрейм данных
- Получить первую строку для каждого уникального значения в столбце
- Определить источник каждой строки в Pandas Merge
- Отфильтровать n наибольших и n наименьших значений в фрейме данных
- Сопоставить категориальные данные уникальным целым значениям
- Добавить префикс к имени каждого столбца
- Преобразовать категориальные столбцы в одно «горячее» значение
В качестве упражнения я рекомендую попытаться самим решить задачу, а затем посмотреть решение, которое я привожу.
Имейте в виду, что приводимые мной решения не являются единственным способом решить задачу. Вы можете получить в чем-то отличное и тем не менее правильное решение. В таком случае поделитесь им в комментариях.
Итак, начинаем!
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, которые я часто использую для анализа данных
Обратные ссылки
Автор не разрешил комментировать эту запись
Комментарии
Показывать комментарии Как список | Древовидной структурой