Как загрузить excel файл в pandas

Время на прочтение
7 мин

Количество просмотров 172K

Если Вы только начинаете свой путь знакомства с возможностями Python, ваши познания еще имеют начальный уровень — этот материал для Вас. В статье мы опишем, как можно извлекать информацию из данных, представленных в Excel файлах, работать с ними используя базовый функционал библиотек. В первой части статьи мы расскажем про установку необходимых библиотек и настройку среды. Во второй части — предоставим обзор библиотек, которые могут быть использованы для загрузки и записи таблиц в файлы с помощью Python и расскажем как работать с такими библиотеками как pandas, openpyxl, xlrd, xlutils, pyexcel.

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

Отправная точка — наличие данных

ПЕРЕВОД
Оригинал статьи — www.datacamp.com/community/tutorials/python-excel-tutorial
Автор — Karlijn Willems

Когда вы начинаете проект по анализу данных, вы часто сталкиваетесь со статистикой собранной, возможно, при помощи счетчиков, возможно, при помощи выгрузок данных из систем типа Kaggle, Quandl и т. д. Но большая часть данных все-таки находится в Google или репозиториях, которыми поделились другие пользователи. Эти данные могут быть в формате Excel или в файле с .csv расширением.

Данные есть, данных много. Анализируй — не хочу. С чего начать? Первый шаг в анализе данных — их верификация. Иными словами — необходимо убедиться в качестве входящих данных.
В случае, если данные хранятся в таблице, необходимо не только подтвердить качество данных (нужно быть уверенным, что данные таблицы ответят на поставленный для исследования вопрос), но и оценить, можно ли доверять этим данным.

Проверка качества таблицы

Чтобы проверить качество таблицы, обычно используют простой чек-лист. Отвечают ли данные в таблице следующим условиям:

  • данные являются статистикой;
  • различные типы данных: время, вычисления, результат;
  • данные полные и консистентные: структура данных в таблице — систематическая, а присутствующие формулы — работающие.

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

Бест-практикс табличных данных

Читать данные таблицы при помощи Python — это хорошо. Но данные хочется еще и редактировать. Причем редактирование данных в таблице, должно соответствовать следующим условиям:

  • первая строка таблицы зарезервирована для заголовка, а первый столбец используется для идентификации единицы выборки;
  • избегайте имен, значений или полей с пробелами. В противном случае, каждое слово будет интерпретироваться как отдельная переменная, что приведет к ошибкам, связанным с количеством элементов в строке в наборе данных. Лучше использовать подчеркивания, регистр (первая буква каждого раздела текста — заглавная) или соединительные слова;
  • отдавайте предпочтение коротким названиям;
  • старайтесь избегать использования названий, которые содержат символы ?, $,%, ^, &, *, (,),-,#, ?,,,<,>, /, |, , [ ,] ,{, и };
  • удаляйте любые комментарии, которые вы сделали в файле, чтобы избежать дополнительных столбцов или полей со значением NA;
  • убедитесь, что любые недостающие значения в наборе данных отображаются как NA.

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

Если вы работаете с Microsoft Excel, вы наверняка знаете, что есть большое количество вариантов сохранения файла помимо используемых по умолчанию расширения: .xls или .xlsx (переходим на вкладку “файл”, “сохранить как” и выбираем другое расширение (наиболее часто используемые расширения для сохранения данных с целью анализа — .CSV и.ТХТ)). В зависимости от варианта сохранения поля данных будут разделены знаками табуляции или запятыми, которые составляют поле “разделитель”. Итак, данные проверены и сохранены. Начинаем готовить рабочее пространство.

Подготовка рабочего пространства

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

Первый шаг — проверка рабочей директории.

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

Для проверки дайте следующие команды:

# Import `os` 
import os

# Retrieve current working directory (`cwd`)
cwd = os.getcwd()
cwd

# Change directory 
os.chdir("/path/to/your/folder")

# List all files and directories in current directory
os.listdir('.')

Эти команды важны не только для загрузки данных, но и для дальнейшего анализа. Итак, вы прошли все проверки, вы сохранили данные и подготовили рабочее пространство. Уже можно начать чтение данных в Python? :) К сожалению пока нет. Нужно сделать еще одну последнюю вещь.

Установка пакетов для чтения и записи Excel файлов

Несмотря на то, что вы еще не знаете, какие библиотеки будут нужны для импорта данных, нужно убедиться, что у все готово для установки этих библиотек. Если у вас установлен Python 2> = 2.7.9 или Python 3> = 3.4, нет повода для беспокойства — обычно, в этих версиях уже все подготовлено. Поэтому просто убедитесь, что вы обновились до последней версии :)

Для этого запустите в своем компьютере следующую команду:

# For Linux/OS X
pip install -U pip setuptools

# For Windows
python -m pip install -U pip setuptools

В случае, если вы еще не установили pip, запустите скрипт python get-pip.py, который вы можете найти здесь (там же есть инструкции по установке и help).

Установка Anaconda

Установка дистрибутива Anaconda Python — альтернативный вариант, если вы используете Python для анализа данных. Это простой и быстрый способ начать работу с анализом данных — ведь отдельно устанавливать пакеты, необходимые для data science не придется.

Это особенно удобно для новичков, однако даже опытные разработчики часто идут этим путем, ведь Anakonda — удобный способ быстро протестировать некоторые вещи без необходимости устанавливать каждый пакет отдельно.

Anaconda включает в себя 100 наиболее популярных библиотек Python, R и Scala для анализа данных в нескольких средах разработки с открытым исходным кодом, таких как Jupyter и Spyder. Если вы хотите начать работу с Jupyter Notebook, то вам сюда.

Чтобы установить Anaconda — вам сюда.

Загрузка файлов Excel как Pandas DataFrame

Ну что ж, мы сделали все, чтобы настроить среду! Теперь самое время начать импорт файлов.

Один из способов, которым вы будете часто пользоваться для импорта файлов с целью анализа данных — импорт с помощью библиотеки Pandas (Pandas — программная библиотека на языке Python для обработки и анализа данных). Работа Pandas с данными происходит поверх библиотеки NumPy, являющейся инструментом более низкого уровня. Pandas — мощная и гибкая библиотека и она очень часто используется для структуризации данных в целях облегчения анализа.

Если у вас уже есть Pandas в Anaconda, вы можете просто загрузить файлы в Pandas DataFrames с помощью pd.Excelfile ():

# Import pandas
import pandas as pd

# Assign spreadsheet filename to `file`
file = 'example.xlsx'

# Load spreadsheet
xl = pd.ExcelFile(file)

# Print the sheet names
print(xl.sheet_names)

# Load a sheet into a DataFrame by name: df1
df1 = xl.parse('Sheet1')

Если вы не установили Anaconda, просто запустите pip install pandas, чтобы установить пакет Pandas в вашей среде, а затем выполните команды, приведенные выше.

Для чтения .csv-файлов есть аналогичная функция загрузки данных в DataFrame: read_csv (). Вот пример того, как вы можете использовать эту функцию:

# Import pandas
import pandas as pd

# Load csv
df = pd.read_csv("example.csv") 

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

Как записывать Pandas DataFrame в Excel файл

Предположим, после анализа данных вы хотите записать данные в новый файл. Существует способ записать данные Pandas DataFrames (с помощью функции to_excel ). Но, прежде чем использовать эту функцию, убедитесь, что у вас установлен XlsxWriter, если вы хотите записать свои данные на несколько листов в файле .xlsx:

# Install `XlsxWriter` 
pip install XlsxWriter

# Specify a writer
writer = pd.ExcelWriter('example.xlsx', engine='xlsxwriter')

# Write your DataFrame to a file     
yourData.to_excel(writer, 'Sheet1')

# Save the result 
writer.save()

Обратите внимание, что в фрагменте кода используется объект ExcelWriter для вывода DataFrame. Иными словами, вы передаете переменную writer в функцию to_excel (), и указываете имя листа. Таким образом, вы добавляете лист с данными в существующую книгу. Также можно использовать ExcelWriter для сохранения нескольких разных DataFrames в одной книге.

То есть если вы просто хотите сохранить один файл DataFrame в файл, вы можете обойтись без установки библиотеки XlsxWriter. Просто не указываете аргумент, который передается функции pd.ExcelWriter (), остальные шаги остаются неизменными.

Подобно функциям, которые используются для чтения в .csv-файлах, есть также функция to_csv () для записи результатов обратно в файл с разделителями-запятыми. Он работает так же, как когда мы использовали ее для чтения в файле:

# Write the DataFrame to csv
df.to_csv("example.csv")

Если вы хотите иметь отдельный файл с вкладкой, вы можете передать a t аргументу sep. Обратите внимание, что существуют различные другие функции, которые можно использовать для вывода файлов. Их можно найти здесь.

Использование виртуальной среды

Общий совет по установке библиотек — делать установку в виртуальной среде Python без системных библиотек. Вы можете использовать virtualenv для создания изолированных сред Python: он создает папку, содержащую все необходимое для использования библиотек, которые потребуются для Python.

Чтобы начать работу с virtualenv, сначала нужно его установить. Потом перейти в директорию, где будет находится проект. Создать virtualenv в этой папке и загрузить, если нужно, в определенную версию Python. После этого активируете виртуальную среду. Теперь можно начинать загрузку других библиотек и начинать работать с ними.

Не забудьте отключить среду, когда вы закончите!

# Install virtualenv
$ pip install virtualenv

# Go to the folder of your project
$ cd my_folder

# Create a virtual environment `venv`
$ virtualenv venv

# Indicate the Python interpreter to use for `venv`
$ virtualenv -p /usr/bin/python2.7 venv

# Activate `venv`
$ source venv/bin/activate

# Deactivate `venv`
$ deactivate

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

Но что делать, если у вас несколько проектов, работающих одновременно, и вы не хотите, чтобы они использовали одну и ту же установку Python? Или если у ваших проектов есть противоречивые требования. В таких случаях виртуальная среда — идеальное решение.

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

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    It is not always possible to get the dataset in CSV format. So, Pandas provides us the functions to convert datasets in other formats to the Data frame. An excel file has a ‘.xlsx’ format. 

    Before we get started,  we need to install a few libraries. 

    pip install pandas
    pip install xlrd
    

     For importing an Excel file into Python using Pandas we have to use pandas.read_excel() function.

    Syntax: pandas.read_excel(io, sheet_name=0, header=0, names=None,….)

    Return: DataFrame or dict of DataFrames.

    Let’s suppose the Excel file looks like this:

    Excel file

    Now, we can dive into the code. 

    Example 1: Read an Excel file.

    Python3

    import pandas as pd

    df = pd.read_excel("sample.xlsx")

    print(df)

    Output:

    dataframe

    Example 2: To select a particular column, we can pass a parameter “index_col“. 

    Python3

    import pandas as pd

    df = pd.read_excel("sample.xlsx",

                       index_col = 0)  

    print(df)

    Output:

    select a particular column

    Example 3: In case you don’t prefer the initial heading of the columns, you can change it to indexes using the parameter “header”.

    Python3

    import pandas as pd

    df = pd.read_excel('sample.xlsx',

                       header = None)

    print(df)

    Output:

    dataframe without header

    Example 4: If you want to change the data type of a particular column you can do it using the parameter “dtype“.

    Python3

    import pandas as pd

    df = pd.read_excel('sample.xlsx'

                       dtype = {"Products": str,

                                "Price":float})

    print(df)

    Output:

    data type change

    Example 5: In case you have unknown values, then you can handle it using the parameter “na_values“. It will convert the mentioned unknown values into “NaN” 

    Python3

    import pandas as pd

    df = pd.read_excel('sample.xlsx'

                       na_values =['item1'

                                   'item2'])

    print(df)

    Output:

    Dataframe with NaN value

    Like Article

    Save Article

    В Python данные из файла Excel считываются в объект DataFrame. Для этого используется функция read_excel() модуля pandas.

    Лист Excel — это двухмерная таблица. Объект DataFrame также представляет собой двухмерную табличную структуру данных.

    • Пример использования Pandas read_excel()
    • Список заголовков столбцов листа Excel
    • Вывод данных столбца
    • Пример использования Pandas to Excel: read_excel()
    • Чтение файла Excel без строки заголовка
    • Лист Excel в Dict, CSV и JSON
    • Ресурсы

    Пример использования Pandas read_excel()

    Предположим, что у нас есть документ Excel, состоящий из двух листов: «Employees» и «Cars». Верхняя строка содержит заголовок таблицы.

    Пример использования Pandas read_excel() - 2

    Ниже приведен код, который считывает данные листа «Employees» и выводит их.

    import pandas
    
    excel_data_df = pandas.read_excel('records.xlsx', sheet_name='Employees')
    
    # print whole sheet data
    print(excel_data_df)

    Вывод:

       EmpID    EmpName EmpRole
    0      1     Pankaj     CEO
    1      2  David Lee  Editor
    2      3   Lisa Ray  Author

    Первый параметр, который принимает функция read_excel ()— это имя файла Excel. Второй параметр (sheet_name) определяет лист для считывания данных.

    При выводе содержимого объекта DataFrame мы получаем двухмерные таблицы, схожие по своей структуре со структурой документа Excel.

    Чтобы получить список заголовков столбцов таблицы, используется свойство columns объекта Dataframe. Пример реализации:

    print(excel_data_df.columns.ravel())

    Вывод:

    ['Pankaj', 'David Lee', 'Lisa Ray']

    Мы можем получить данные из столбца и преобразовать их в список значений. Пример:

    print(excel_data_df['EmpName'].tolist())

    Вывод:

    ['Pankaj', 'David Lee', 'Lisa Ray']

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

    import pandas
    
    excel_data_df = pandas.read_excel('records.xlsx', sheet_name='Cars', usecols=['Car Name', 'Car Price'])
    print(excel_data_df)

    Вывод:

             Car Name      Car Price
    0      Honda City     20,000 USD
    1  Bugatti Chiron  3 Million USD
    2     Ferrari 458   2,30,000 USD
    

    Если в листе Excel нет строки заголовка, нужно передать его значение как None.

    excel_data_df = pandas.read_excel('records.xlsx', sheet_name='Numbers', header=None)

    Если вы передадите значение заголовка как целое число (например, 3), тогда третья строка станет им. При этом считывание данных начнется со следующей строки. Данные, расположенные перед строкой заголовка, будут отброшены.

    Объект DataFrame предоставляет различные методы для преобразования табличных данных в формат Dict , CSV или JSON.

    excel_data_df = pandas.read_excel('records.xlsx', sheet_name='Cars', usecols=['Car Name', 'Car Price'])
    
    print('Excel Sheet to Dict:', excel_data_df.to_dict(orient='record'))
    print('Excel Sheet to JSON:', excel_data_df.to_json(orient='records'))
    print('Excel Sheet to CSV:n', excel_data_df.to_csv(index=False))
    

    Вывод:

    Excel Sheet to Dict: [{'Car Name': 'Honda City', 'Car Price': '20,000 USD'}, {'Car Name': 'Bugatti Chiron', 'Car Price': '3 Million USD'}, {'Car Name': 'Ferrari 458', 'Car Price': '2,30,000 USD'}]
    Excel Sheet to JSON: [{"Car Name":"Honda City","Car Price":"20,000 USD"},{"Car Name":"Bugatti Chiron","Car Price":"3 Million USD"},{"Car Name":"Ferrari 458","Car Price":"2,30,000 USD"}]
    Excel Sheet to CSV:
     Car Name,Car Price
    Honda City,"20,000 USD"
    Bugatti Chiron,3 Million USD
    Ferrari 458,"2,30,000 USD"
    • Документы API pandas read_excel()

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

    Хотя многие Data Scientist’ы больше привыкли работать с CSV-файлами, на практике очень часто приходится сталкиваться с обычными Excel-таблицами. Поэтому сегодня мы расскажем, как читать Excel-файлы в Pandas, а также рассмотрим основные возможности Python-библиотеки OpenPyXL для чтения метаданных ячеек.

    Дополнительные зависимости для возможности чтения Excel таблиц

    Для чтения таблиц Excel в Pandas требуются дополнительные зависимости:

    • xlrd поддерживает старые и новые форматы MS Excel [1];
    • OpenPyXL поддерживает новые форматы MS Excel (.xlsx) [2];
    • ODFpy поддерживает свободные форматы OpenDocument (.odf, .ods и .odt) [3];
    • pyxlsb поддерживает бинарные MS Excel файлы (формат .xlsb) [4].

    Мы рекомендуем установить только OpenPyXL, поскольку он нам пригодится в дальнейшем. Для этого в командной строке прописывается следующая операция:

    pip install openpyxl

    Затем в Pandas нужно указать путь к Excel-файлу и одну из установленных зависимостей. Python-код выглядит следующим образом:

    import pandas as pd
    pd.read_excel(io='temp1.xlsx', engine='openpyxl')
    #
         Name  Age  Weight
    0    Alex   35      87
    1   Lesha   57      72
    2  Nastya   21      64

    Читаем несколько листов

    Excel-файл может содержать несколько листов. В Pandas, чтобы прочитать конкретный лист, в аргументе нужно указать sheet_name. Можно указать список названий листов, тогда Pandas вернет словарь (dict) с объектами DataFrame:

    dfs = pd.read_excel(io='temp1.xlsx',
                        engine='openpyxl',
                        sheet_name=['Sheet1', 'Sheet2'])
    dfs
    #
    {'Sheet1':      Name  Age  Weight
     0    Alex   35      87
     1   Lesha   57      72
     2  Nastya   21      64,
     'Sheet2':     Name  Age  Weight
     0  Gosha   43      95
     1   Anna   24      65
     2   Lena   22      78}

    Если таблицы в словаре имеют одинаковые атрибуты, то их можно объединить в один DataFrame. В Python это выглядит так:

    pd.concat(dfs).reset_index(drop=True)
         Name  Age  Weight
    0    Alex   35      87
    1   Lesha   57      72
    2  Nastya   21      64
    3   Gosha   43      95
    4    Anna   24      65
    5    Lena   22      78

    Указание диапазонов

    Таблицы могут размещаться не в самом начале, а как, например, на рисунке ниже. Как видим, таблица располагается в диапазоне A:F.

    Таблица Excel

    Таблица с диапазоном

    Чтобы прочитать такую таблицу, нужно указать диапазон в аргументе usecols. Также дополнительно можно добавить header — номер заголовка таблицы, а также nrows — количество строк, которые нужно прочитать. В аргументе header всегда передается номер строки на единицу меньше, чем в Excel-файле, поскольку в Python индексация начинается с 0 (на рисунке это номер 5, тогда указываем 4):

    pd.read_excel(io='temp1.xlsx',
                  engine='openpyxl',
                  usecols='D:F',
                  header=4, # в excel это №5
                  nrows=3)
    #
        Name  Age  Weight
    0  Gosha   43      95
    1   Anna   24      65
    2   Lena   22      78

    Читаем таблицы в OpenPyXL

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

    from openpyxl import load_workbook
    wb = load_workbook('temp2.xlsx')
    ws = wb['Лист1']
    type(ws)
    # openpyxl.worksheet.worksheet.Worksheet

    Excel-таблица OpenPyXL

    Две таблицы на листе

    Допустим, имеется Excel-файл с несколькими таблицами на листе (см. рисунок выше). Если бы мы использовали Pandas, то он бы выдал следующий результат:

    pd.read_excel(io='temp2.xlsx',
                  engine='openpyxl')
    #
         Name  Age  Weight  Unnamed: 3 Name.1  Age.1  Weight.1
    0    Alex   35      87         NaN  Tanya     25        66
    1   Lesha   57      72         NaN  Gosha     43        77
    2  Nastya   21      64         NaN  Tolya     32        54

    Можно, конечно, заняться обработкой и привести таблицы в нормальный вид, а можно воспользоваться OpenPyXL, который хранит таблицу и его диапазон в словаре. Чтобы посмотреть этот словарь, нужно вызвать ws.tables.items. Вот так выглядит Python-код:

    ws.tables.items()
    wb = load_workbook('temp2.xlsx')
    ws = wb['Лист1']
    ws.tables.items()
    #
    [('Таблица1', 'A1:C4'), ('Таблица13', 'E1:G4')]

    Обращаясь к каждому диапазону, можно проходить по каждой строке или столбцу, а внутри них – по каждой ячейке. Например, следующий код на Python таблицы объединяет строки в список, где первая строка уходит на заголовок, а затем преобразует их в DataFrame:

    dfs = []
    for table_name, value in ws.tables.items():
        table = ws[value]
        header, *body = [[cell.value for cell in row]
                          for row in table]
        df = pd.DataFrame(body, columns=header)
        dfs.append(df)

    Если таблицы имеют одинаковые атрибуты, то их можно соединить в одну:

    pd.concat(dfs)
    #
         Name  Age  Weight
    0    Alex   35      87
    1   Lesha   57      72
    2  Nastya   21      64
    0   Tanya   25      66
    1   Gosha   43      77
    2   Tolya   32      54

    Сохраняем метаданные таблицы

    Как указано в коде выше, у ячейки OpenPyXL есть атрибут value, который хранит ее значение. Помимо value, можно получить тип ячейки (data_type), цвет заливки (fill), примечание (comment) и др.

    Excel OpenPyXL

    Таблица с цветными ячейками

    Например, требуется сохранить данные о цвете ячеек. Для этого мы каждую ячейку с числами перезапишем в виде <значение,RGB>, где RGB — значение цвета в формате RGB (red, green, blue). Python-код выглядит следующим образом:

    # _TYPES = {int:'n', float:'n', str:'s', bool:'b'}
    data = []
    for row in ws.rows:
        row_cells = []
        for cell in row:
            cell_value = cell.value
            if cell.data_type == 'n':
                cell_value = f"{cell_value},{cell.fill.fgColor.rgb}"
            row_cells.append(cell_value)
        data.append(row_cells)

    Первым элементом списка является строка-заголовок, а все остальное уже значения таблицы:

    pd.DataFrame(data[1:], columns=data[0])
    #
         Name          Age       Weight
    0    Alex  35,00000000  87,00000000
    1   Lesha  57,00000000  72,FFFF0000
    2  Nastya  21,FF00A933  64,00000000

    Теперь представим атрибуты в виде индексов с помощью метода stack, а после разобьём все записи на значение и цвет методом str.split:

    (pd.DataFrame(data[1:], columns=data[0])
     .set_index('Name')
     .stack()
     .str.split(',', expand=True)
    )
    #
                    0         1
    Name                       
    Alex   Age     35  00000000
           Weight  87  00000000
    Lesha  Age     57  00000000
           Weight  72  FFFF0000
    Nastya Age     21  FF00A933
           Weight  64  0000000

    Осталось только переименовать 0 и 1 на Value и Color, а также добавить атрибут Variable, который обозначит Вес и Возраст. Полный код на Python выглядит следующим образом:

    (pd.DataFrame(data[1:], columns=data[0])
     .set_index('Name')
     .stack()
     .str.split(',', expand=True)
     .set_axis(['Value', 'Color'], axis=1)
     .rename_axis(index=['Name', 'Variable'])
     .reset_index()
    )
    #
         Name Variable Value     Color
    0    Alex      Age    35  00000000
    1    Alex   Weight    87  00000000
    2   Lesha      Age    57  00000000
    3   Lesha   Weight    72  FFFF0000
    4  Nastya      Age    21  FF00A933
    5  Nastya   Weight    64  00000000

    Ещё больше подробностей о работе с таблицами в Pandas, а также их обработке на реальных примерах Data Science задач, вы узнаете на наших курсах по Python в лицензированном учебном центре обучения и повышения квалификации IT-специалистов в Москве.

    Источники

    1. https://xlrd.readthedocs.io/en/latest/
    2. https://openpyxl.readthedocs.io/en/latest/
    3. https://github.com/eea/odfpy
    4. https://github.com/willtrnr/pyxlsb

    The read_excel() method can read Excel 2003 (.xls) and
    Excel 2007+ (.xlsx) files using the xlrd Python
    module. The to_excel() instance method is used for
    saving a DataFrame to Excel. Generally the semantics are
    similar to working with csv data. See the cookbook for some
    advanced strategies

    10.5.1 Reading Excel Files

    In the most basic use-case, read_excel takes a path to an Excel
    file, and the sheetname indicating which sheet to parse.

    # Returns a DataFrame
    read_excel('path_to_file.xls', sheetname='Sheet1')
    

    10.5.1.1 ExcelFile class

    To facilitate working with multiple sheets from the same file, the ExcelFile
    class can be used to wrap the file and can be be passed into read_excel
    There will be a performance benefit for reading multiple sheets as the file is
    read into memory only once.

    xlsx = pd.ExcelFile('path_to_file.xls)
    df = pd.read_excel(xlsx, 'Sheet1')
    

    The ExcelFile class can also be used as a context manager.

    with pd.ExcelFile('path_to_file.xls') as xls:
        df1 = pd.read_excel(xls, 'Sheet1')
        df2 = pd.read_excel(xls, 'Sheet2')
    

    The sheet_names property will generate
    a list of the sheet names in the file.

    The primary use-case for an ExcelFile is parsing multiple sheets with
    different parameters

    data = {}
    # For when Sheet1's format differs from Sheet2
    with pd.ExcelFile('path_to_file.xls') as xls:
        data['Sheet1'] = pd.read_excel(xls, 'Sheet1', index_col=None, na_values=['NA'])
        data['Sheet2'] = pd.read_excel(xls, 'Sheet2', index_col=1)
    

    Note that if the same parsing parameters are used for all sheets, a list
    of sheet names can simply be passed to read_excel with no loss in performance.

    # using the ExcelFile class
    data = {}
    with pd.ExcelFile('path_to_file.xls') as xls:
        data['Sheet1'] = read_excel(xls, 'Sheet1', index_col=None, na_values=['NA'])
        data['Sheet2'] = read_excel(xls, 'Sheet2', index_col=None, na_values=['NA'])
    
    # equivalent using the read_excel function
    data = read_excel('path_to_file.xls', ['Sheet1', 'Sheet2'], index_col=None, na_values=['NA'])
    

    New in version 0.12.

    ExcelFile has been moved to the top level namespace.

    New in version 0.17.

    read_excel can take an ExcelFile object as input

    10.5.1.2 Specifying Sheets

    Note

    The second argument is sheetname, not to be confused with ExcelFile.sheet_names

    Note

    An ExcelFile’s attribute sheet_names provides access to a list of sheets.

    • The arguments sheetname allows specifying the sheet or sheets to read.
    • The default value for sheetname is 0, indicating to read the first sheet
    • Pass a string to refer to the name of a particular sheet in the workbook.
    • Pass an integer to refer to the index of a sheet. Indices follow Python
      convention, beginning at 0.
    • Pass a list of either strings or integers, to return a dictionary of specified sheets.
    • Pass a None to return a dictionary of all available sheets.
    # Returns a DataFrame
    read_excel('path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA'])
    

    Using the sheet index:

    # Returns a DataFrame
    read_excel('path_to_file.xls', 0, index_col=None, na_values=['NA'])
    

    Using all default values:

    # Returns a DataFrame
    read_excel('path_to_file.xls')
    

    Using None to get all sheets:

    # Returns a dictionary of DataFrames
    read_excel('path_to_file.xls',sheetname=None)
    

    Using a list to get multiple sheets:

    # Returns the 1st and 4th sheet, as a dictionary of DataFrames.
    read_excel('path_to_file.xls',sheetname=['Sheet1',3])
    

    New in version 0.16.

    read_excel can read more than one sheet, by setting sheetname to either
    a list of sheet names, a list of sheet positions, or None to read all sheets.

    New in version 0.13.

    Sheets can be specified by sheet index or sheet name, using an integer or string,
    respectively.

    10.5.1.3 Reading a MultiIndex

    New in version 0.17.

    read_excel can read a MultiIndex index, by passing a list of columns to index_col
    and a MultiIndex column by passing a list of rows to header. If either the index
    or columns have serialized level names those will be read in as well by specifying
    the rows/columns that make up the levels.

    For example, to read in a MultiIndex index without names:

    In [1]: df = pd.DataFrame({'a':[1,2,3,4], 'b':[5,6,7,8]},
       ...:                   index=pd.MultiIndex.from_product([['a','b'],['c','d']]))
       ...: 
    
    In [2]: df.to_excel('path_to_file.xlsx')
    
    In [3]: df = pd.read_excel('path_to_file.xlsx', index_col=[0,1])
    
    In [4]: df
    Out[4]: 
         a  b
    a c  1  5
      d  2  6
    b c  3  7
      d  4  8
    

    If the index has level names, they will parsed as well, using the same
    parameters.

    In [5]: df.index = df.index.set_names(['lvl1', 'lvl2'])
    
    In [6]: df.to_excel('path_to_file.xlsx')
    
    In [7]: df = pd.read_excel('path_to_file.xlsx', index_col=[0,1])
    
    In [8]: df
    Out[8]: 
               a  b
    lvl1 lvl2      
    a    c     1  5
         d     2  6
    b    c     3  7
         d     4  8
    

    If the source file has both MultiIndex index and columns, lists specifying each
    should be passed to index_col and header

    In [9]: df.columns = pd.MultiIndex.from_product([['a'],['b', 'd']], names=['c1', 'c2'])
    
    In [10]: df.to_excel('path_to_file.xlsx')
    
    In [11]: df = pd.read_excel('path_to_file.xlsx',
       ....:                     index_col=[0,1], header=[0,1])
       ....: 
    
    In [12]: df
    Out[12]: 
    c1         a   
    c2         b  d
    lvl1 lvl2      
    a    c     1  5
         d     2  6
    b    c     3  7
         d     4  8
    

    Warning

    Excel files saved in version 0.16.2 or prior that had index names will still able to be read in,
    but the has_index_names argument must specified to True.

    10.5.1.4 Parsing Specific Columns

    It is often the case that users will insert columns to do temporary computations
    in Excel and you may not want to read in those columns. read_excel takes
    a parse_cols keyword to allow you to specify a subset of columns to parse.

    If parse_cols is an integer, then it is assumed to indicate the last column
    to be parsed.

    read_excel('path_to_file.xls', 'Sheet1', parse_cols=2)
    

    If parse_cols is a list of integers, then it is assumed to be the file column
    indices to be parsed.

    read_excel('path_to_file.xls', 'Sheet1', parse_cols=[0, 2, 3])
    

    10.5.1.5 Cell Converters

    It is possible to transform the contents of Excel cells via the converters
    option. For instance, to convert a column to boolean:

    read_excel('path_to_file.xls', 'Sheet1', converters={'MyBools': bool})
    

    This options handles missing values and treats exceptions in the converters
    as missing data. Transformations are applied cell by cell rather than to the
    column as a whole, so the array dtype is not guaranteed. For instance, a
    column of integers with missing values cannot be transformed to an array
    with integer dtype, because NaN is strictly a float. You can manually mask
    missing data to recover integer dtype:

    cfun = lambda x: int(x) if x else -1
    read_excel('path_to_file.xls', 'Sheet1', converters={'MyInts': cfun})
    

    10.5.2 Writing Excel Files

    10.5.2.1 Writing Excel Files to Disk

    To write a DataFrame object to a sheet of an Excel file, you can use the
    to_excel instance method. The arguments are largely the same as to_csv
    described above, the first argument being the name of the excel file, and the
    optional second argument the name of the sheet to which the DataFrame should be
    written. For example:

    df.to_excel('path_to_file.xlsx', sheet_name='Sheet1')
    

    Files with a .xls extension will be written using xlwt and those with a
    .xlsx extension will be written using xlsxwriter (if available) or
    openpyxl.

    The DataFrame will be written in a way that tries to mimic the REPL output. One
    difference from 0.12.0 is that the index_label will be placed in the second
    row instead of the first. You can get the previous behaviour by setting the
    merge_cells option in to_excel() to False:

    df.to_excel('path_to_file.xlsx', index_label='label', merge_cells=False)
    

    The Panel class also has a to_excel instance method,
    which writes each DataFrame in the Panel to a separate sheet.

    In order to write separate DataFrames to separate sheets in a single Excel file,
    one can pass an ExcelWriter.

    with ExcelWriter('path_to_file.xlsx') as writer:
        df1.to_excel(writer, sheet_name='Sheet1')
        df2.to_excel(writer, sheet_name='Sheet2')
    

    Note

    Wringing a little more performance out of read_excel
    Internally, Excel stores all numeric data as floats. Because this can
    produce unexpected behavior when reading in data, pandas defaults to trying
    to convert integers to floats if it doesn’t lose information (1.0 -->
    1
    ). You can pass convert_float=False to disable this behavior, which
    may give a slight performance improvement.

    10.5.2.2 Writing Excel Files to Memory

    New in version 0.17.

    Pandas supports writing Excel files to buffer-like objects such as StringIO or
    BytesIO using ExcelWriter.

    New in version 0.17.

    Added support for Openpyxl >= 2.2

    # Safe import for either Python 2.x or 3.x
    try:
        from io import BytesIO
    except ImportError:
        from cStringIO import StringIO as BytesIO
    
    bio = BytesIO()
    
    # By setting the 'engine' in the ExcelWriter constructor.
    writer = ExcelWriter(bio, engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1')
    
    # Save the workbook
    writer.save()
    
    # Seek to the beginning and read to copy the workbook to a variable in memory
    bio.seek(0)
    workbook = bio.read()
    

    Note

    engine is optional but recommended. Setting the engine determines
    the version of workbook produced. Setting engine='xlrd' will produce an
    Excel 2003-format workbook (xls). Using either 'openpyxl' or
    'xlsxwriter' will produce an Excel 2007-format workbook (xlsx). If
    omitted, an Excel 2007-formatted workbook is produced.

    10.5.3 Excel writer engines

    New in version 0.13.

    pandas chooses an Excel writer via two methods:

    1. the engine keyword argument
    2. the filename extension (via the default specified in config options)

    By default, pandas uses the XlsxWriter for .xlsx and openpyxl
    for .xlsm files and xlwt for .xls files. If you have multiple
    engines installed, you can set the default engine through setting the
    config options
    io.excel.xlsx.writer and
    io.excel.xls.writer. pandas will fall back on openpyxl for .xlsx
    files if Xlsxwriter is not available.

    To specify which writer you want to use, you can pass an engine keyword
    argument to to_excel and to ExcelWriter. The built-in engines are:

    • openpyxl: This includes stable support for Openpyxl from 1.6.1. However,
      it is advised to use version 2.2 and higher, especially when working with
      styles.
    • xlsxwriter
    • xlwt
    # By setting the 'engine' in the DataFrame and Panel 'to_excel()' methods.
    df.to_excel('path_to_file.xlsx', sheet_name='Sheet1', engine='xlsxwriter')
    
    # By setting the 'engine' in the ExcelWriter constructor.
    writer = ExcelWriter('path_to_file.xlsx', engine='xlsxwriter')
    
    # Or via pandas configuration.
    from pandas import options
    options.io.excel.xlsx.writer = 'xlsxwriter'
    
    df.to_excel('path_to_file.xlsx', sheet_name='Sheet1')
    

    Like this post? Please share to your friends:
  • Как загрузить картинки в word
  • Как загрузить excel на яндекс директ
  • Как загрузить календарь в excel
  • Как загрузить excel на mac
  • Как загрузить документ текстового редактора word