python 2023a 10 Библиотека Pandas (2)
Введение.
Всем привет! Я тут подумала хорошо будет поделиться своими решениями по питону! Пожалуйста подпишитесь на мой канал про мою жизнь в МГУ "Варечка Окаянная")))
1. Предобработка данных
В исходной таблице два столбца с названиями \texttt{name} и \texttt{score}.
Напишите программный код, который преобразует исходную таблицу следующим образом:
- Необходимо удалить те строки, у которых отсутствуют данные в первом столбце (\texttt{name}).
- Отсутствующие значения во втором столбце (\texttt{score}) необходимо заменить средним по данному столбцу.
- Результат необходимо сохранить в файл \texttt{output.csv}.
Формат ввода
На вход подается файл \texttt{input.csv}, в первой строке названия столбцов: \texttt{name} и \texttt{score}, данные в строках разделены с помощью запятых. Данные в колонке \texttt{score} - числовые.
Формат вывода
Результат необходимо сохранить в файл \texttt{output.csv}, разделитель - запятая.
Примечания:
Используйте методы \texttt{read_csv()}, \texttt{dropna()}, \texttt{fillna()}, \texttt{to_csv()}. Для поиска среднего значения используйте метод \texttt{mean}, после применения метода округлять результат не требуется. Нужно считать среднее по датафрейму после удаления лишних строк.
Ответ:
import pandas as pd
df = pd.read_csv('input.csv')
df.dropna(subset=['name'], inplace=True)
df['score'].fillna(df['score'].mean(), inplace=True)
df.to_csv('output.csv', index=False)
2. Температура
В файле \texttt{input.csv} хранится информация о температуре на определенную дату. Первый столбец называется \texttt{date}, в данном столбце хранится дата. Второй столбец называется \texttt{temperature_c}, здесь хранится информация о температуре по шкале Цельсия. Необходимо добавить новый столбец с названием \texttt{temperature_f}, в котором будет храниться информация о температуре по Фаренгейту в соответствующий день. Результат округлите до целого с помощью \texttt{round()}.
Формат ввода
На вход подается файл \texttt{input.csv}, в первой строке названия столбцов: \texttt{date} и \texttt{temperature_c}, данные в строках разделены с помощью запятых. Данные в колонке \texttt{temperature_c} - числовые.
Формат вывода
Результат необходимо сохранить в файл \texttt{output.csv}, разделитель - запятая. Обратите внимание на формат вывода в примере.
Ответ:
import pandas as pd
df = pd.read_csv('input.csv')
df['temperature_f'] = df['temperature_c'].apply(lambda x: round(9/5 * x + 32))
df.to_csv('output.csv', index=False)
3. Метод loc
Определите результат применения метода \texttt{loc[2:3]} к следующему датафрейму:
Варианты ответов:
- login4, login5
- login1, login4, login5
- login1, login4
Ответ:
login1, login4
4. Водители склада
В файле \texttt{input.csv} дана таблица с информацией о работе водителей склада №7:
ID,Фамилия водителя,Объем груза,Тип операции
1,Уточкин,2726,Вывоз
2,Петров,3581,Привоз
3,Сидоров,3724,Привоз
4,Петров,2683,Привоз
5,Иванов,1637,Вывоз
6,Уточкин,3836,Вывоз
7,Ёжкин,3055,Привоз
8,Иванов,3220,Привоз
9,Сидоров,2584,Вывоз
Необходимо вычислить по каждому водителю сколько килограмм суммарно груза он привёз за вычетом суммарного веса вывезенного груза. Итоговую таблицу отсортировать по убыванию этой суммы, а при равенстве её для двух водителей — по возрастанию фамилий водителей (в лексикографическом порядке). Сохранить в формате CSV в файл \texttt{output.csv}.
Примечания:
Входные данные хранятся в файле \texttt{input.csv} в формате CSV (разделитель - запятая без пробелов, 1 строка содержит названия столбцов). Входные данные можно считать с помощью \texttt{pandas.read_csv()}. Выходные данные нужно сохранять в файл \texttt{output.csv} также в формате CSV (это можно сделать с помощью \texttt{DataFrame.to_csv()}). Обратите внимание, что в файле \texttt{input.csv} может вообще не быть никакой информации (только названия колонок). В этом случае в \texttt{output.csv} также нужно сохранить только названия колонок (\texttt{DataFrame.to_csv()} также может корректно это выполнить без указания дополнительных параметров). В результирующей таблице названия столбцов следует записать на русском языке, поэтому в \texttt{DataFrame.to_csv()} следует дополнительно указать параметр: \texttt{encoding="utf8"}.
Ответ:
import pandas as pd
df = pd.read_csv('input.csv')
# Handle the case with no data
if df.empty:
df.to_csv('output.csv', encoding='utf8', index=False)
else:
df['Объем груза'] *= df['Тип операции'].apply(lambda x: -1 if x == 'Вывоз' else 1)
result = df.groupby('Фамилия водителя', as_index=False)['Объем груза'].sum()
result = result.sort_values(by=['Объем груза', 'Фамилия водителя'], ascending=[False, True])
result.to_csv('output.csv', encoding='utf8', index=False)
5. Лёгкий подъём
В файле \texttt{input.csv} дана таблица с информацией о рейсах авиакомпании "Лёгкий подъём":
ID,Город отправления,Город прибытия,Номер борта
7,Геленджик,Омск,128
8,Москва,Красноярск,191
...
При помощи группировки и метода \texttt{nunique()} необходимо для каждого номера борта найти количество различных маршрутов, которые он осуществляет. Итоговую таблицу отсортировать по убыванию количества различных уникальных маршрутов, а при равенстве числа для двух бортов — по возрастанию номеров бортов. Сохранить в формате CSV в файл \texttt{output.csv}.
Примечания:
Входные данные хранятся в файле \texttt{input.csv} в формате CSV (разделитель - запятая без пробелов, 1 строка содержит названия столбцов). Входные данные можно считать с помощью \texttt{pandas.read_csv()}. Выходные данные нужно сохранять в файл \texttt{output.csv} также в формате CSV (это можно сделать с помощью \texttt{DataFrame.to_csv()}).
Ответ:
import pandas as pd
df = pd.read_csv('input.csv')
# Create unique route column
df['Уникальных маршрутов'] = df['Город отправления'] + ' - ' + df['Город прибытия']
# Group by board number and count unique routes
df_grouped = df.groupby('Номер борта')['Уникальных маршрутов'].nunique().reset_index()
# Sort by number of unique routes and board number
df_sorted = df_grouped.sort_values(by=['Уникальных маршрутов', 'Номер борта'], ascending=[False, True])
df_sorted.to_csv('output.csv', index=False, encoding='utf8')
6. Метод merge
В первой таблице хранится информация о сдаче экзамена №1 в следующем виде: \texttt{id} (идентификатор студента в базе данных), \texttt{name} (имя), \texttt{score} (оценка).
Во второй таблице хранится информация о сдаче экзамена №2 в следующем виде: \texttt{id} (идентификатор студента в базе данных), \texttt{name} (имя), \texttt{score} (оценка).
Вам необходимо получить общую таблицу с результатами двух экзаменов. В итоговой таблице должны храниться данные только по тем студентам, которые сдавали оба экзамена (то есть те, о ком есть информация и в первой, и во второй таблице).
Для объединения таблиц вы решили использовать метод \texttt{merge}. Какое значения аргумента \texttt{how} необходимо использовать для корректного отображения результатов?
- left
- inner
- outer
- right
Ответ:
inner
Спасибо!
Телеграмм Свалка астронома Ai 🦄 MSU
Телеграмм Варечкин Блокнот 🌸 MSU
ВК Школа https://vk.com/mgu_gdz Физиув UwU
Дзен https://dzen.ru/varechka_uni_physics