Загрузка данных
# Лабораторная работа №2
# Выполнение операций над объектом DataFrame и его содержимым
# ==========================================
# Задание 1. Импорт библиотек и создание DataFrame
# ==========================================
import numpy as np
import pandas as pd
data = {
'Name': ['Иван Петров', 'Мария Соколова', 'Петр Сидоров', 'Анна Козлова', 'Олег Смирнов'],
'Department': ['IT', 'HR', 'IT', 'Finance', 'HR'],
'Salary': [75000, 65000, 82000, 71000, 69000],
'Experience': [3, 5, 7, 2, 4]
}
df = pd.DataFrame(data)
print("Исходный DataFrame:")
print(df)
# ==========================================
# Задание 2. Переименование столбцов
# ==========================================
df_renamed = df.rename(columns={
'Name': 'name',
'Department': 'dept',
'Salary': 'salary',
'Experience': 'exp'
})
print("\nrename() с копией:")
print(df_renamed)
df.rename(columns={
'Name': 'name',
'Department': 'dept',
'Salary': 'salary',
'Experience': 'exp'
}, inplace=True)
print("\nrename(inplace=True):")
print(df)
df.columns = ['name', 'dept', 'salary', 'exp']
print("\nПрямое присваивание:")
print(df)
# ==========================================
# Задание 3. Добавление столбцов
# ==========================================
df['bonus'] = df['salary'] * 0.1
df['city'] = ['Москва', 'Санкт-Петербург', 'Москва', 'Казань', 'Новосибирск']
df.insert(2, 'gender', ['M', 'F', 'M', 'F', 'M'])
new_columns = pd.DataFrame({
'birth_year': [1990, 1988, 1985, 1992, 1989],
'phone': [
'+7-901-123-45-67',
'+7-902-234-56-78',
'+7-903-345-67-89',
'+7-904-456-78-90',
'+7-905-567-89-01'
]
})
df = pd.concat([df, new_columns], axis=1)
print("\nПосле добавления столбцов:")
print(df)
# ==========================================
# Задание 4. Удаление столбцов
# ==========================================
df.drop('phone', axis=1, inplace=True)
df.drop(['bonus', 'birth_year'], axis=1, inplace=True)
df = df.drop(['city'], axis=1)
print("\nПосле удаления столбцов:")
print(df)
# ==========================================
# Задание 5. Добавление строк
# ==========================================
df.loc[len(df)] = ['Елена Новикова', 'IT', 'F', 95000, 6]
new_rows = pd.DataFrame({
'name': ['Дмитрий Волков', 'Татьяна Морозова'],
'dept': ['Finance', 'HR'],
'gender': ['M', 'F'],
'salary': [88000, 72000],
'exp': [8, 3]
})
df = pd.concat([df, new_rows], ignore_index=True)
print("\nПосле добавления строк:")
print(df)
# ==========================================
# Задание 6. Конкатенация строк
# ==========================================
df['full_info'] = (
df['name'] + ' (' +
df['dept'] + ') - стаж: ' +
df['exp'].astype(str) + ' лет'
)
df['name_dept'] = df['name'].str.cat(df['dept'], sep=' | ')
df.drop('full_info', axis=1, inplace=True)
print("\nПосле объединения строк:")
print(df)
# ==========================================
# Задание 7. Замена значений
# ==========================================
df['exp'] = df['exp'] + 1
df.loc[df['dept'] == 'IT', 'salary'] = df.loc[df['dept'] == 'IT', 'salary'] * 1.1
condition = (df['salary'] < 80000) & (df['exp'] > 4)
df.loc[condition, 'salary'] = df.loc[condition, 'salary'] + 5000
df['bonus_flag'] = np.where(df['exp'] > 5, 'Senior', 'Junior')
print("\nПосле изменений:")
print(df)
# ==========================================
# Задание 8. Удаление строк
# ==========================================
df.drop(0, axis=0, inplace=True)
df = df[df['salary'] >= 80000].copy()
indices_to_drop = [2, 4]
existing_indices = [i for i in indices_to_drop if i in df.index]
df.drop(existing_indices, axis=0, inplace=True)
print("\nПосле удаления строк:")
print(df)
# ==========================================
# Задание 9. Сброс индекса
# ==========================================
df.reset_index(drop=True, inplace=True)
print("\nПосле сброса индекса:")
print(df)
# ==========================================
# Задание 10. Логический отбор
# ==========================================
selected = df.loc[df['dept'] == 'HR', ['name', 'salary', 'exp']]
print("\nСотрудники HR:")
print(selected)
first_three = df.iloc[:3, [0, 1, 3]]
print("\nПервые 3 строки:")
print(first_three)
avg_salary = df['salary'].mean()
high_earners = df.loc[df['salary'] > avg_salary, ['name', 'dept', 'salary']]
print("\nЗарплата выше средней:")
print(high_earners)
# ==========================================
# Задание 11. Сохранение и загрузка
# ==========================================
df.to_csv('employees_modified.csv', index=False, encoding='utf-8')
print("\nФайл сохранён")
df_loaded = pd.read_csv('employees_modified.csv')
print("\nЗагруженный DataFrame:")
print(df_loaded)
print("\nСовпадение:", df.equals(df_loaded))
# ==========================================
# Дополнительное задание
# ==========================================
dept_stats = df.groupby('dept').agg({
'salary': ['mean', 'min', 'max'],
'exp': 'mean'
}).round(0)
print("\nСтатистика по отделам:")
print(dept_stats)
dept_stats.to_csv('department_stats.csv')
print("\nФайл статистики сохранён")