# Как использовать Pandas для чтения файлов Excel в Python

В этом учебнике **вы научитесь использовать Python и Pandas для чтения файлов Excel с помощью функции Pandas read\_excel**. Файлы Excel повсюду – и хоть они и не являются идеальным типом данных для многих исследователей данных, умение работать с ними – это необходимый навык.

К концу этого урока вы узнаете:

* Как использовать функцию Pandas read\_excel для чтения файла Excel
* Как прочитать, укажите имя листа Excel для чтения в Pandas
* Как прочитать несколько листов или файлов Excel
* Как использовать определенные столбцы из файла Excel в Pandas
* Как пропускать строки при чтении файлов Excel в Pandas
* И более

Оглавление

* [Быстрый ответ: используйте Pandas read\_excel для чтения файлов Excel](#bystryi-otvet-ispolzuite-pandas-read_excel-dlya-chteniya-failov-excel)
* [Понимание функции read\_excel в Pandas](#ponimanie-funkcii-read_excel-v-pandas)
* [Как читать файлы Excel в Pandas read\_excel](#kak-chitat-faily-excel-v-pandas-read_excel)
* [Как указать имена листов Excel в Pandas read\_excel](#kak-ukazat-imena-listov-excel-v-funkcii-pandas-read)
* [Как указать имена столбцов в Pandas read\_excel](#kak-zadat-nazvaniya-stolbcov-v-pandas-read_excel)
* [Как указать типы данных в Pandas read\_excel](#kak-zadat-tipy-dannykh-v-pandas-read_excel)
* [Как пропустить строки при чтении файлов Excel в Pandas](#kak-propustit-stroki-pri-chtenii-excel-failov-v-pandas)
* [Как прочитать несколько листов в файле Excel в Pandas](#kak-chitat-neskolko-listov-v-faile-excel-s-pomoshyu-pandas)
* [Как читать только n строк при чтении файлов Excel в Pandas](#kak-prochitat-tolko-n-strok-pri-chtenii-failov-excel-v-pandas)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Быстрый ответ: используйте Pandas read\_excel для чтения файлов Excel

Для чтения файлов Excel в Pandas Python используйте функцию `read_excel()`. Вы можете указать путь к файлу и имя листа для чтения, как показано ниже:

```python
# Reading an Excel File in Pandas
import pandas as pd

df = pd.read_excel('/Users/datagy/Desktop/Sales.xlsx')

# With a Sheet Name
df = pd.read_excel(
   io='/Users/datagy/Desktop/Sales.xlsx'
   sheet_name ='North'
)
```

В следующих разделах этого руководства вы узнаете больше о функции Pandas `read_excel()`, чтобы лучше понять, как настраивать чтение файлов Excel.

### Понимание функции read\_excel в Pandas

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

| Параметр      | Описание                                                                                 | Доступный вариант                                                                                                   |
| ------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `io=`         | Путь к книге.                                                                            | URL к файлу, путь к файлу и т.д.                                                                                    |
| `sheet_name=` | Имя листа для чтения. По умолчанию будет использоваться первый лист в книге (позиция 0). | Может считывать строки (название листа), целые числа (позиция) или списки (несколько листов)                        |
| `usecols=`    | Столбцы для чтения, если не все столбцы должны быть прочитаны                            | Может быть строками столбцов, столбцами в стиле Excel («A:C») или целыми числами, представляющими позиции столбцов. |
| `dtype=`      | Типы данных для использования для каждого столбца                                        | Словарь с колонками в качестве ключей и типами данных в качестве значений.                                          |
| `skiprows=`   | Количество строк для пропуска сверху                                                     | Целое число, представляющее количество строк для пропуска                                                           |
| `nrows=`      | Количество строк для анализа                                                             | Введите целое число, представляющее количество строк для чтения.                                                    |

В таблице выше перечислены некоторые ключевые параметры функции Pandas `.read_excel()`. Полный список можно найти в [официальной документации](https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html). В следующих разделах вы узнаете, как использовать вышеуказанные параметры для чтения файлов Excel различными способами с помощью Python и Pandas.

### Как читать файлы Excel в Pandas read\_excel

Как показано выше, самый простой способ прочитать файл Excel с помощью Pandas — просто передать путь к файлу Excel. Параметр `io=` является первым параметром, поэтому вы можете просто передать строку с путем к файлу.

Параметр принимает как путь к файлу, так и HTTP путь, FTP путь и другие. Давайте посмотрим, что произойдет, если мы прочитаем файл Excel, размещенный [на моей странице Github](https://github.com/datagy/mediumdata/raw/master/Sales.xlsx).

```python
# Reading an Excel file in Pandas
import pandas as pd

df = pd.read_excel('https://github.com/datagy/mediumdata/raw/master/Sales.xlsx')
print(df.head())

# Returns:
#         Date Customer  Sales
# 0 2022-04-01        A    191
# 1 2022-04-02        B    727
# 2 2022-04-03        A    782
# 3 2022-04-04        B    561
# 4 2022-04-05        A    969
```

Если вы скачали файл и посмотрели его, вы заметите, что в файле есть три листа. Как же Pandas узнает, какой лист загрузить? По умолчанию, Pandas использует первый лист (по позиции), если не указано иное.

В следующем разделе вы узнаете, как указать, какой лист вы хотите загрузить в DataFrame.

### Как указать имена листов Excel в функции Pandas read

Как показано в предыдущем разделе, вы узнали, что когда лист не указан, Pandas загружает первый лист в Excel книге. В предоставленной книге есть три листа в следующей структуре:

```
Sales.xlsx
|---East
|---West
|---North
```

Из-за этого мы знаем, что данные с листа “East” были загружены. Если мы хотим загрузить данные с листа “West”, мы можем использовать параметр `sheet_name=`, чтобы указать, какой лист мы хотим загрузить.

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

Давайте рассмотрим, как можно указать имя листа для `'West':`

```python
# Specifying an Excel Sheet to Load by Name
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    sheet_name='West')
print(df.head())

# Returns:
#         Date Customer  Sales
# 0 2022-04-01        A    504
# 1 2022-04-02        B    361
# 2 2022-04-03        A    694
# 3 2022-04-04        B    702
# 4 2022-04-05        A    255
```

Подобным образом можно загрузить лист по его _позиции_. По умолчанию Pandas использует позицию `0`, что загружает первый лист. Допустим, мы хотим повторить наш предыдущий пример и загрузить данные из листа под названием `'West'`, необходимо знать _где_ находится этот лист.

Поскольку мы знаем, что лист второй, мы можем передать индекс 1:

```python
# Specifying an Excel Sheet to Load by Position
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    sheet_name=1)
print(df.head())

# Returns:
#         Date Customer  Sales
# 0 2022-04-01        A    504
# 1 2022-04-02        B    361
# 2 2022-04-03        A    694
# 3 2022-04-04        B    702
# 4 2022-04-05        A    255
```

Мы видим, что оба этих метода вернули данные одного и того же листа. В следующем разделе вы узнаете, как указать, какие столбцы загружать при использовании функции read\_excel в Pandas.

### Как задать названия столбцов в Pandas read\_excel

Может быть много случаев, когда вы не хотите загружать все столбцы в файле Excel. Это может быть связано с тем, что файл имеет слишком много столбцов или разные столбцы для разных листов.

Чтобы сделать это, мы можем использовать параметр `usecols=`. Это очень гибкий параметр, который позволяет вам указать:

* Список названий столбцов
* Строка с диапазонами колонок Excel
* Список целых чисел, указывающих индексы столбцов для загрузки

Наиболее часто вы встретите людей, использующих список названий столбцов для чтения. Каждый из этих столбцов - это строка, разделенная запятыми, содержащаяся в списке.

Давайте загрузим наш DataFrame из приведенного выше примера, на этот раз загрузив только столбцы `'Customer'` и `'Sales'`

```python
# Specifying Columns to Load by Name
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    usecols=['Customer', 'Sales'])
print(df.head())

# Returns:
#   Customer  Sales
# 0        A    191
# 1        B    727
# 2        A    782
# 3        B    561
# 4        A    969
```

Мы видим, что передав список строк, представляющих столбцы, мы смогли проанализировать только эти столбцы.

Если мы хотим использовать изменения в Excel, мы также можем указать столбцы `'B:C'`. Давайте посмотрим, как это выглядит ниже:

```python
# Specifying Columns to Load by Excel Range
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    usecols='B:C')
print(df.head())

# Returns:
#   Customer  Sales
# 0        A    191
# 1        B    727
# 2        A    782
# 3        B    561
# 4        A    969
```

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

```python
# Specifying Columns to Load by Their Position
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    usecols=[1,2])
print(df.head())

# Returns:
#   Customer  Sales
# 0        A    191
# 1        B    727
# 2        A    782
# 3        B    561
# 4        A    969
```

В следующем разделе вы узнаете, как указать типы данных при чтении файлов Excel.

### Как задать типы данных в Pandas read\_excel

Pandas упрощает указание типа данных различных столбцов при чтении файла Excel. Это служит трем основным целям:

1. Предотвращение неправильного чтения данных
2. Ускорение операции чтения
3. Экономия памяти

Вы можете передать словарь, где ключи — это столбцы, а значения — типы данных. Это гарантирует правильное чтение данных. Давайте посмотрим, как можно задать типы данных для наших столбцов.

```python
# Specifying Data Types for Columns When Reading Excel Files
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    dtype={'date':'datetime64', 'Customer': 'object', 'Sales':'int'})
print(df.head())

# Returns:
#   Customer  Sales
#         Date Customer  Sales
# 0 2022-04-01        A    191
# 1 2022-04-02        B    727
# 2 2022-04-03        A    782
# 3 2022-04-04        B    561
# 4 2022-04-05        A    969
```

Важно отметить, что для этого не нужно передавать все столбцы. В следующем разделе вы узнаете, как пропускать строки при чтении файлов Excel.

### Как пропустить строки при чтении Excel файлов в Pandas

В некоторых случаях вы столкнетесь с файлами, где в вашем файле Excel есть отформатированные строки с заголовками, как показано ниже:

<figure><img src="http://datagy.io/wp-content/uploads/2022/03/A-poorly-formatted-Excel-File.png" alt="A poorly formatted Excel File" height="452" width="490"><figcaption><p>Excel с необычным форматированием</p></figcaption></figure>

Если бы мы прочитали лист `'North'`, то получили бы следующий результат:

```python
# Reading a poorly formatted Excel file
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    sheet_name='North')
print(df.head())

# Returns:
#            North Sales Unnamed: 1 Unnamed: 2
# 0     Totals Available        NaN        NaN
# 1                 Date   Customer      Sales
# 2  2022-04-01 00:00:00          A        164
# 3  2022-04-02 00:00:00          B        612
# 4  2022-04-03 00:00:00          A        260
```

Pandas упрощает пропуск определенного количества строк при чтении Excel файла. Это можно сделать с помощью параметра `skiprows=`. Мы видим, что нужно пропустить две строки, поэтому мы можем просто передать значение 2, как показано ниже:

```python
# Reading a Poorly Formatted File Correctly
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    sheet_name='North',
    skiprows=2)
print(df.head())

# Returns:
#         Date Customer  Sales
# 0 2022-04-01        A    164
# 1 2022-04-02        B    612
# 2 2022-04-03        A    260
# 3 2022-04-04        B    314
# 4 2022-04-05        A    215
```

Этот метод считывает файл намного точнее! Он может быть спасением при работе с плохо форматированными файлами. В следующем разделе вы узнаете, как считывать несколько листов в Excel файле с помощью Pandas.

### Как читать несколько листов в файле Excel с помощью Pandas

Pandas делает очень простым чтение нескольких листов одновременно. Это можно сделать с использованием параметра `sheet_name=`. В наших предыдущих примерах мы передавали только одну строку для чтения одного листа. Однако, вы также можете передать список листов для чтения нескольких листов сразу.

Давайте посмотрим, как мы можем прочитать наши первые два листа:

```python
# Reading Multiple Excel Sheets at Once in Pandas
import pandas as pd

dfs = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    sheet_name=['East', 'West'])

print(type(dfs))

# Returns: <class 'dict'>
```

В приведенном выше примере мы передали список листов для чтения. Когда мы [использовали функцию `type()` для проверки](https://datagy.io/python-type-isinstance/) типа возвращенного значения, мы увидели, что был возвращен словарь.

Каждый лист является ключом словаря, при этом DataFrame является значением соответствующего ключа. Давайте посмотрим, как мы можем получить доступ к DataFrame `'West'`

```python
# Reading Multiple Excel Sheets in Pandas
import pandas as pd

dfs = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    sheet_name=['East', 'West'])

print(dfs.get('West').head())

# Returns: 
#         Date Customer  Sales
# 0 2022-04-01        A    504
# 1 2022-04-02        B    361
# 2 2022-04-03        A    694
# 3 2022-04-04        B    702
# 4 2022-04-05        A    255
```

Вы также можете прочитать _все_ листы сразу, указав `sheet_name=` со значением `None`. Аналогично, это возвращает словарь всех листов:

```python
# Reading Multiple Excel Sheets in Pandas
import pandas as pd

dfs = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    sheet_name=None)
```

В следующем разделе вы узнаете, как читать несколько файлов Excel в Pandas.

### Как прочитать только n строк при чтении файлов Excel в Pandas

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

Это можно сделать с помощью параметра `nrows=`, который принимает целочисленное значение количества строк, которые вы хотите загрузить в DataFrame. Давайте посмотрим, как мы можем прочитать первые пять строк Excel

```python
# Reading n Number of Rows of an Excel Sheet
import pandas as pd

df = pd.read_excel(
    io='https://github.com/datagy/mediumdata/raw/master/Sales.xlsx',
    nrows=5)
print(df)

# Returns:
#         Date Customer  Sales
# 0 2022-04-01        A    191
# 1 2022-04-02        B    727
# 2 2022-04-03        A    782
# 3 2022-04-04        B    561
# 4 2022-04-05        A    969
```

### Заключение

В этом уроке вы узнали, как использовать Python и Pandas для чтения файлов Excel в DataFrame с помощью функции `.read_excel()`. Вы узнали, как использовать эту функцию для чтения Excel-файла, указания имен листов, чтения только определенных столбцов и указания типов данных. Далее вы узнали, как пропускать строки, читать только заданное количество строк и читать несколько листов.

### Дополнительные ресурсы

Чтобы узнать больше о смежных темах, ознакомьтесь с руководствами ниже:

* Таблица данных Pandas в файл CSV – экспорт с использованием .to\_csv()
* Объедините данные в Pandas с помощью слияния, объединения и объединения
* Введение в Pandas для науки о данных
* Подведение итогов и анализ таблиц данных Pandas
