Файл: Тема Основы языка Python.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.12.2023

Просмотров: 132

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

114
Чтобы получить более подробные сведения о наборе данных, можно воспользоваться методами, возвращающими размер
DataFrame, статистические сведения о его содержании и др.
Использование метода pandas.DataFrame.info показано на рисунке 143.
Рис. 143. Информация по содержимому таблицы
Рис. 144. Информация по содержимому таблицы с параметром memory_usage
Добавление параметра memory_usage=«deep» позволяет посмотреть, сколько на самом деле памяти занимает набор данных (рис. 144).
Значение параметра verbose=False выводит сводку количества столбцов и их тип данных, но не информацию о столбце (рис. 145).

115
Рис. 145. Информация по содержимому таблицы с параметром verbose
Основные параметры метода pandas.DataFrame.info:
− verbose – bool, необязательный параметр, по умолчанию используется настройка в pandas.options.display.max_info_columns;
− buf – буферизация, по умолчанию sys.stdout; указывает, куда отправить вывод;
− max_cols – int, необязательный параметр; по умолчанию используется настройка в pandas.options.display.max_info_columns;
− memory_usage – bool, str, необязательный параметр; указывает, следует ли отображать общее использование памяти элементами DataFrame
(включая индекс); по умолчанию соответствует pandas.options.display.memory_usage; True – всегда показывает использование памяти, False – никогда не показывает использование памяти; значение
«deep» эквивалентно «True с глубоким самоанализом»;
− null_counts – bool, необязательный параметр; указывает, показывать ли ненулевые значения; значение True всегда показывает количество, а False никогда не показывает количество.
Методы pandas.DataFrame.shape и pandas.DataFrame.size позволяют увидеть размерность и количество записей в таблице (рис. 146).
Рис. 146. Размерность таблицы и количество записей DataFrame

116
Содержимое столбца можно получить, указав его наименование (рис.
147).
Рис. 147. Вывод указанного количества строк файла из целевого столбца
Pandas позволяет вывести из файла несколько определенных колонок.
Это можно сделать несколькими способами. Если необходимо посмотреть на выборку данных, то достаточно указать множество столбцов (рис. 148).
Рис. 148. Вывод указанных колонок и первых строк файла
В случае, когда новая выборка требуется для дальнейшей работы с данными, нужно записать указанные столбцы в другую переменную и,

117 выполняя дальнейшие преобразования, обращаться уже к новому имени объекта (рис. 149).
Рис. 149. Вывод указанных колонок и первых строк файла в новом объекте
DataFrame
Получить список заголовков
(индексы) колонок можно, воспользовавшись методом pandas.DataFrame.columns. Обращение к колонке идет при помощи среза по индексу, начиная с [0]. Обращение к последней колонке по индексу [–1] (рис. 150, 151).
Рис. 150. Вывод списка наименований колонок объекта DataFrame, начиная с первой
Рис. 151. Вывод наименования колонки объекта DataFrame по индексу


118
Иногда данные в таблицах могут быть неполные и содержать пустые ячейки. Для такого случая в арсенале методов pandas есть pandas.DataFrame.dropna, позволяющий удалить столбцы или строки, где встречается значение NaN:
DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False.
Основные параметры метода:
− axis – {0 или ‘index’, 1 или ‘columns’}, по умолчанию – 0; ось = 0 – удаляет все строки с пустыми значениями, ось = 1 – удаляет колонки с пустыми значениями;
− how – по умолчанию – «any», определяет, удаляется ли строка или столбец из DataFrame, когда у нее есть хотя бы один NaN или все NaN.
Рис. 152. DataFrame с пустой последней колонкой
После считывания файла и передачи его значений в объект DataFrame можно вывести двумерный массив со всем содержимым, при этом пустые ячейки файла заполняет значение NaN, эквивалентное отсутствию данных
(рис. 152).

119
Рис. 153. Результат метода DataFrame.dropna с параметром axis=1
Применением метода DataFrame.dropna с параметром удаления пустых значений по axis=1 позволяет удалить целиком столбец с отсутствующими значениями. Таким образом, не нужно вручную удалять неполные данные, это легко выполняется библиотекой pandas (рис. 153).
Рис. 154. Результат метода DataFrame.dropna с параметром axis=0
Использование данном случае параметра axis=0 приводит к полному удалению данных из таблицы, так как пустое значение есть в каждой строке таблицы и выбор axis=0, соответственно, приводит к потере всех данных
(рис. 154).
Рис. 155. DataFrame с несколькими пустыми значениями

120
В примере – тот же DataFrame, но неполные значения есть в разных колонках, они рассеяны по таблице данных.
Рис. 156. Результат метода DataFrame.dropna с параметром axis=0
В этом случае применение параметра axis=0 дает лучший результат, чем axis=1, так как в последнем варианте теряются данные сразу двух колонок, а при использовании axis=0 убираются строки с неполными данными (рис. 156, 157).
Рис. 157. Результат метода DataFrame.dropna с параметром axis=1
На примере файла можно посмотреть работу еще одного полезного метода сортировки содержимого колонки и сортировки содержимого таблицы – pandas.DataFrame.sort_values (рис. 158).
Рис. 158. Сортировка значений одной таблицы

121
Для того чтобы продолжить работу с файлом, из которого были удалены столбцы или строки с неполными данными, необходимо применить метод pandas.DataFrame.copy. Это позволит продолжить дальнейшие преобразования над данными и работу с DataFrame, как с новым объектом
(рис. 159).
Рис. 159. Передача копии DataFrame в новый объект
Метод pandas.DataFrame.copy имеет один главный параметр:
«deep» – bool, по умолчанию True; делает глубокую копию, включая копию данных и индексов; при выборе deep=False ни индексы, ни данные не копируются.
После создания копии набора данных может возникнуть необходимость переименовать колонки, сохранив данные неизменными. Для этого в pandas есть метод pandas.DataFrame.rename (рис. 160).
Рис. 160. Переименование наименований столбцов
Значения функции/словаря должны быть уникальными (1-к-1). Метки, не содержащиеся в словаре/Series, будут оставлены как есть.
Использован один из основных параметров метода – «columns» – словарь или функция, альтернатива указанию колонки (mapper, axis=1 эквивалентно columns=mapper).


122
После удаления строк с пустыми значениями нумерация строк стала непоследовательной. Для переименования индексов используется другой параметр – «index» – словарь или функция, альтернатива указанию колонки
(mapper, axis=0 эквивалентно index=mapper) (рис. 161).
Рис. 161. Переименование индексов строк
Переименование колонок и строк можно объединить в одну строку кода (рис. 162).
Рис. 162. Переименование индексов столбцов и строк
При помощи метода .rename можно произвести преобразования типа данных в индексах строк и изменить регистр в заголовках колонок (рис. 163).
Рис. 163. Изменение регистра и типа данных при помощи метода .rename
Метод pandas.DataFrame.rename_axis устанавливает наименование для индекса или столбцов (рис. 164).

123
Рис. 164. Добавление названия к колонке нумерации строк
Метод pandas.DataFrame.reset_index сбрасывает индекс DataFrame и использует вместо него индекс по умолчанию (рис. 165).
Рис. 165. Результат работы метода .reset_index
Замена значений столбцов возможна при помощи метода pandas.DataFrame.replace (рис. 166).
Рис. 166. Результат работы метода .replace
В библиотеке pandas есть собственные методы визуализации хранящихся в таблицах данных. Один из них – pandas.DataFrame.hist.
Для построения диаграмм используются только количественные данные, поэтому попытка передать в метод таблицу, содержащую только категориальные (строковые) значения, вызовет предупреждение о несоответствии полученного типа данных:

124
«ValueError: hist method requires numerical columns, nothing to plot».
Некоторые параметры:
− data – DataFrame, объект pandas, содержащий данные;
− bins – str или последовательность, количество бинов гистограммы, которые будут использоваться, по умолчанию – 10;
− column – str или последовательность, если используется, то ограничен выбранным подмножеством столбцов;
− grid – bool, по умолчанию True, показывать ли линии сетки оси.
Примеры реализации показаны на рис. 167, 168.
Рис. 167. Результат работы метода .hist (использованы параметры по умолчанию)

125
Рис. 168. Результат работы метода .hist (использованы пользовательские параметры columns, grid=False, bins=5)
«hist» является представлением распределения данных. Эта функция вызывает matplotlib.pyplot.hist() для каждого объекта Series в таблице данных, что приводит к одной гистограмме на столбец.
2.1.3. Объединение наборов данных и запись DataFrame в файл
Pandas предоставляет различные средства для простого объединения
Series или DataFrame с различными типами данных в индексах, а также функции реляционной алгебры для выполнения операций соединения/слияния.
Это функции
«pandas.DataFrame.join»,
«pandas.DataFrame.merge» и «pandas.DataFrame.concat».
Объединение объектов при помощи .concat. Функция выполняет операцию (конкатенации) объединения вдоль оси при выполнении дополнительного набора логики (объединение или пересечение) из индексов
(если таковые имеются) на других осях.
В качестве простого примера работы метода можно использовать три набора данных с последовательными индексами (рис. 169, 170).


126
Рис. 169. Создание тестовых наборов данных

127
Рис. 170. Результат работы метода .concat с использованием параметров по умолчанию
Основные параметры метода:
− objs – последовательность или отображение объектов Series или
DataFrame. Если передан словарь, отсортированные ключи будут использоваться в качестве аргумента (keys); любые объекты None будут отброшены без уведомления;
− axis – {0, 1, …}, по умолчанию 0; ось для конкатенации;
− join – {«inner», «external»}, по умолчанию «external», указывает, как обрабатывать индексы на другой оси; наружный («inner») для объединения и внутренний («external») для пересечения;
− ignore_index – boolean, по умолчанию False. Если True, не используются значения индекса на оси конкатенации. Результирующая ось будет помечена 0, …, n – 1;
− keys – последовательность, по умолчанию None; строит иерархический индекс, используя переданные ключи в качестве внешнего уровня. Если пройдено несколько уровней, должен содержать кортежи;
− levels – список последовательностей, по умолчанию None; определяет уровни (уникальные значения), чтобы использовать для создания
MultiIndex. В противном случае они будут выведены из ключей;
− names – список, по умолчанию None; названия уровней в результирующем иерархическом индексе;
− copy – логическое значение, по умолчанию True; если False, не копирует данные без необходимости (рис. 171, 172, 173).

128
Рис. 171. Примеры наборов данных с повторяющимся индексом
Рис. 172. Результат работы метода .concat с пользовательскими параметрами, объединение по axis=1

129
Рис. 173. Результат работы метода .concat с пользовательскими параметрами, объединение по axis=0
При склеивании нескольких DataFrames можно выбрать, как обрабатывать другие оси (кроме сцепляемой). Это можно сделать следующими двумя способами:
1.
Опция по умолчанию join=«outer» – объединение всех записей, приводит к нулевой потере информации.
2.
Опция join=«inner» – для пересекающихся записей (рис. 174).

130
Рис. 174. Результат объединения по axis=0 и axis= 1 пересекающихся значений
Объединение таблиц может быть сделано при помощи .append, в результате создается копия одного DataFrame, к которому добавляется один или несколько других наборов данных (рис. 175).

131
Рис. 175. Результат работы метода .append
Метод pandas.DataFrame.merge позволяет произвести объединение по одному или нескольким целевым столбцам с указанием индекса (рис. 176,
177).
Рис. 176. Результат работы метода .merge, объединение по целевому столбцу «key»


132
Рис. 177. Результат работы метода .merge, с двумя целевыми столбцами, параметр «how» – внешнее объединение
Метод pandas.DataFrame.join подходит для объединения DataFrame с разными индексами столбцов (рис. 178).

133
Рис. 178. Результат работы метода .join
Методы объединения одинаково работают как с категориальными, так и с количественными типами данных.
После объединения больших DataFrame некоторые значения могут дублироваться, и метод pandas.DataFrame.drop_duplicates позволяет автоматически избавляться от строк с идентичным содержанием (рис. 179,
180).

134
Рис. 179. Пример двух DataFrame с одинаковой строкой (индекс 1)
Рис. 180. Объединение файлов с удалением дубликатов
Полученный в результате различных преобразований DataFrame может быть записан во внешний файл.

135
Некоторые функции pandas для записи разных типов файлов представлены в табл. 8.
Таблица 8
1   2   3   4   5   6