Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Библиотека pandas, углубляем знания о таблице DataFrame

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Управление содержимым и структурой DataFrame

Продолжаем разбирать возможности DataFrame. Мы узнали ещё далеко не все операции (статья 1, статья 2), которые можно делать таблицами.

Перебор и изменение содержимого DataFrame

Важная задача при работе с таблицами это получить любой элемент и изменить любой элемент таблицы. Как мы знаем, элемент таблицы это величина стоящая на пересечении строки и столбца. Другими словами у нас должна быть возможность перебирать строки таблицы и получить доступ к любому из полей текущей строки. И так укажем на три способа доступа к элементу таблицы (пусть это будет таблицы fr):

  1. fr[столбец][индекс] - чтение и запись;
  2. fr.loc[индекс][столбец] - чтение;
  3. fr.at[индекс, столбец] - чтение и запись.

Вот, собственно, на это можно опираться. Ну добавим ещё сюда fr.index, итерирующий объект, с помощью которого можно перебирать все значения индекса. Зная названия столбцов мы получаем полный доступ к таблице, к её содержимому. Рассмотрим программу ниже. Программа в цикле проходит по строкам, проверяет значение в одном из полей и меняет другое поле.

Рисунок 1. Просмотр и изменение содержимого таблицы. Текст прогаммы см. ниже по ссылке
Рисунок 1. Просмотр и изменение содержимого таблицы. Текст прогаммы см. ниже по ссылке
primer385.py

Условие if fr.loc[i]['Год рождения'] > 1997 можно заменить на if fr.at[i,'Год рождения'] > 1997 или на if fr['Год рождения'][i] > 1997. Действие fr.at[i, 'Зарплата'] = fr.at[i, 'Зарплата'] * 3 можно заменить на fr['Зарплата'][i] = fr['Зарплата'][i] * 3.

Результат выполнения программы см. на рисунке 2

Рисунок 2. Изменения значений в таблице
Рисунок 2. Изменения значений в таблице

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

Добавление столбцов к DataFrame

Для добавления столбцов в таблицу можно использовать три способа:

  1. Конструкция вида fr[Новы столбец] = [элементы, стоящие в столбце];
  2. Можно использовать метод insert(), он позволяет вставлять столбец в нужное место;
  3. Метод assign() позволяет создать новую таблицу с добавлением столбца.

#!/usr/bin/python3
import numpy as np
import pandas as pd
people = {'Фамилия': ['Иванов', 'Петров', 'Сидоров', 'Душечкина'],
'Год рождения': [1999, 1988, 1997, 2001],
'Зарплата': [88000.3, 65000.2, 70000.4, 75000.9]}
fr =  pd.DataFrame(people)
fr['Data 1'] = [3, 9, 18, 36] # в конец
fr.insert(1, 'Data 2', ['A', 'B', 'C', 'D']) # перед столбцом с номером 1
fr = fr.assign(new = [100, 200, 300, 400]) # создание новой таблицы
print(fr)

Результат выполнения программы см. на рисунке 3.

Рисунок 3. Результат добавления столбцов
Рисунок 3. Результат добавления столбцов

Удаление столбцов DataFrame

Ну и наконец, для полного набора операций со структурой таблицы рассмотрим возможность удаления столбцов. Есть две не плохие возможности

  1. Метод drop(), он позволяет удалить сразу несколько столбцов;
  2. Метод pop(), он позволяет удалить только один столбец.

Рассмотрим программу ниже

#!/usr/bin/python3
import numpy as np
import pandas as pd
people = {'Фамилия': ['Иванов', 'Петров', 'Сидоров', 'Душечкина'],
'Год рождения': [1999, 1988, 1997, 2001],
'Зарплата': [88000.3, 65000.2, 70000.4, 75000.9],
'Должность': ['Директор', 'Мастер', 'Оператор', 'Уборщик']
}
fr =  pd.DataFrame(people)
print(fr)
fr = fr.drop(['Фамилия', 'Год рождения'], axis=1)
fr.pop('Должность')
print(fr)

Результат выполнения программы на рисунке 4

Рисунок 4. Результат выполнения удаления столбцов
Рисунок 4. Результат выполнения удаления столбцов

Важное замечание
fr = fr.drop(['Фамилия', 'Год рождения'], axis=1) - создаётся новая таблица и мы присваиваем ей новое имя. Если вы не хотите создавать новую таблицу используйте вариант fr.drop(['Фамилия', 'Год рождения'], axis=1, inplace=True). Метод же pop() по умолчанию меняет текущую таблицу.

Ну, пока всё! Следующая статья здесь.

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

Зачем вам таблицы, если это можно выразить формулами?
Зачем вам таблицы, если это можно выразить формулами?