Технологии Blogger.

Excel и Python. Основы работы с Pandas.

В этом уроке рассмотрим основные моменты при работе с пакетом Pandas, который позволяет работать с Excel данными, как с двухмерными таблицами. Мы изучим как работать с самой таблицей, как массивом данных, с отдельными столбцами и строками, а также научимся делать отборы по условиям.
Excel и Python. Основы работы с Pandas.
Для начала подготовим Excel файл с примером, который будем использовать в качестве источника данных (всю обработку данных будем делать в Python, без сохранения в Excel, для ускорения работы). Файл должен содержать лист "Данные" с такой информацией:

Excel и Python. Основы работы с Pandas.

Сохраните файл с названием "Excel_Python-3.xlsx". Теперь запускаем Spyder, создаем новый скрипт и туда вносим следующий код, который позволит нам прочитать данные из вышеуказанного Excel файла в DataFrame, который мы будем использовать сегодня в примерах. Скрипт сохраняем в ту же папку, куда сохранили Excel файл.

import xlwings as xw
import pandas as pd

wb=xw.Book('Excel_Python-3.xlsx')
data_excel = wb.sheets['Данные']
data_pd = data_excel.range('A1:D7').options(pd.DataFrame, header = 1, index = False).value
print (data_pd)
Итак, данные прочитаны, внесены в DataFrame data_pd, с которым мы будем работать в дальнейшем.

Таблица


data_pd.shape - функция показывается количество строк и количество столбцов в таблице. В нашем случае получим (6, 4), т.е. в нашей таблице 6 строк (заголовок не считается) и 4 столбца.

data_pd.info() - получаем общую сводку о таблицу, в т.ч. какие столбцы, их названия, тип данных в столбцах, количество не пустых элементов. При выполнении функции на обучающем примере мы получим:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 4 columns):
Фамилия    6 non-null object
Имя        6 non-null object
Возраст    6 non-null float64
Доход      6 non-null float64
dtypes: float64(2), object(2)
memory usage: 320.0+ bytes

Работа со строками

data_pd = data_pd.append({'Фамилия':'Егоров', 'Имя':'Михаил', 'Возраст':'37','Доход':'40000'}, ignore_index=True) - Функция Append добавляет строку в таблицу. В качестве первого аргумента в фигурных скобках мы указываем те данные, что хотим добавить в формате 'Название столбца' : 'Значение', вторым аргументом мы говорим о том, что нам не важно в какое место таблицы добавится строка (по умолчанию в конец таблицы).

data_pd.drop([0, 1], axis=0, inplace=True) - Функция Drop удаляет строки. Первым параметром в квадратных скобках мы указываем номера строк, которые хотим удалить (нумерация строк начинается в Pandas с 0), вторым аргументом указываем что хотим удалить строку (axis=0) или столбец (axis=1), последним аргументом говорим о том, что измения должны быть произведены непосредственно в той таблице, с которой мы работаем (inplace=True), в противном случае (inplace=False) Pandas создаст копию таблицы, где удалит указанные строки, что может привести к путаницу и ошибкам.

data_pd.head(3) - Выводит указанное количество строк с начала таблицы, в данном случае 3.

data_pd[:3] - Функция аналогичная head, получаем указанное количество строк с начала таблицы.

data_pd[-3:] - Получаем указанное количество строк с конца таблицы.

Работа со столбцами

data_pd.columns - Выводит названия столбцов в таблице. В нашем случае при выполнении функции получим следующее: Index(['Фамилия', 'Имя', 'Возраст', 'Доход'], dtype='object')

data_pd.dtypes - Выводит тип данных в столбцах. В нашем случае:
Фамилия     object
Имя         object
Возраст    float64
Доход      float64
dtype: object

data_pd['Пол'] =['Муж.','Муж.','Муж.','Муж.','Муж.','Муж.'] - Добавляем новый столбец. В левой части в квадратных скобках указываем название столбца, в правой части - что в этом столбце должно содержаться. Обратите внимание, что количество записей должно равняться количеству строк в таблице, иначе получите ошибку "Length of values does not match length of index".

data_pd.drop(['Фамилия'], axis=1, inplace=True)  - Функция Drop, как и говорилось ранее, удаляет столбец или строку. В данном случае в качестве первого параметра в квадратных скобках указываем название столбца, далее указываем что удаляем именно столбец (axis=1), и не забываем указать что измения должны быть произведены непосредственно в той таблице, с которой мы работаем (inplace=True).

data_pd[['Фамилия', 'Имя']] - Получаем данные только по отдельным столбцам, а не по всей таблице в целом.

Работа со строками и столбцами

data_pd.loc[[0, 1], ['Фамилия', 'Имя']] - Функция loc позволяет получить данные только по конкретным строкам и столбцам. Первым агрументом указываем номера строк, которых хотим получить, вторым - названия столбцов.

data_pd.iloc[[0, 1], [0, 1]] - Функция iloc позволяет получить данные обращаясь и к строкам и к столбцам по номерам. Показанный пример вернет теже данные, что и вариант выше (обратите внимание, что номерация столбцов, как и строк, в Pandas начинается с 0).
 

Отбор данных по условию


data_pd[(data_pd['Доход'] >= 30000) & (data_pd['Фамилия'] == 'Петров')] - Отбираем данные по двум условиям. В первом говорим о том, что доход должен быть больше 30 000, а фамилия сотрудника должна быть Петров. Обратите внимание, что используется логическое условие И (&) - это значит, что данные будут получены, если выполнены оба условия. При использовании логического условия ИЛИ (|), будут отобраны те строки, в которых выполняется хоть одно из указанных условий.

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