Транспонирование Dataframe в Pandas

В этой статье вы узнаете, как транспонировать dataframe Pandas с помощью атрибута .T и метода .transpose(). Кроме того, вы научитесь создавать копию dataframe (а не представление).

Оглавление

Загрузка примера dataframe

Для этого урока мы будем использовать два разных набора данных. Это связано с тем, что метод .transpose() работает по-разному в зависимости от того, содержит ли ваш dataframe разнородные типы данных или нет.

Давайте начнем с загрузки примеров dataframe:

import pandas as pd

df1 = pd.DataFrame.from_dict(
    {
        'Name': ['Jane', 'Melissa', 'John', 'Matt'],
        'Age': [23, 45, 35, 64],
        'Birth City': ['London', 'Paris', 'Toronto', 'Atlanta'],
        'Gender': ['F', 'F', 'M', 'M']
    }
)

df2 = pd.DataFrame.from_dict(
    {
        'Age': [1,2,3,4,5],
        'Size': [10,24,43,54,56]
    }
)

print('Dataframe df1:')
print(df1)
print('Dataframe df2:')
print(df2)

Что такое транспонирование?

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

Транспонированная матрица, например df, обычно обозначается как df^T.

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

Например, предположим, у вас есть матрица из 3 строк и 2 столбцов. Транспонированная матрица будет иметь 2 строки и 3 столбца.

Узнать больше о транспонировании можно в этой статье на Википедии.

Транспонирование DataFrame в Pandas

Pandas предоставляет два простых способа транспонировать dataframe. Это можно сделать, добавив .T к имени dataframe, или с помощью метода .transpose(), который позволяет задать дополнительные параметры для более гибкого управления.

Давайте транспонируем dataframe df2 и немного исследуем его транспонированную версию, прежде чем перейти к более сложному примеру.

Используем метод .T для транспонирования нашего dataframe:

>>> df2_T = df2.T
>>> print(df2_T)

       0   1   2   3   4
Age    1   2   3   4   5
Size  10  24  43  54  56

Теперь важно отметить, что все наши значения имеют одинаковый тип данных (конкретно — целые числа). Давайте также изучим типы данных исходного dataframe и его транспонированной версии:

df2_T = df2.T
print('df2\'s datatypes:')
print(df2.dtypes)
print('\n')
print('df2_T\'s datatypes:')
print(df2_T.dtypes)

Ознакомьтесь с другими уроками Python на сайте datagy, включая наше полное руководство по стилизации Pandas и подробный обзор сводных таблиц (Pivot Tables) в Pandas!

Транспонирование DataFrame Pandas с разнородными типами данных

Мы можем видеть, что в исходном dataframe и в его транспонированной версии все типы данных представляют собой int64.

Теперь давайте рассмотрим, что происходит при наличии смешанных типов данных, как в случае с df_1.

df1_T = df1.transpose()
print(df1_T)

Если теперь посмотреть на типы данных этих двух фреймов данных, то можно увидеть, что возвращаются следующие элементы:

df1_T = df1.T
print('df1\'s datatypes:')
print(df1.dtypes)
print('\n')
print('df1_T\'s datatypes:')
print(df1_T.dtypes)

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

Создание копии при транспонировании для смешанных типов данных

По умолчанию, Pandas создаст копию dataframe, если обнаружит смешанные типы данных. Это поведение реализуется неявно, и Pandas автоматически обрабатывает такие случаи.

Однако, если все данные в вашем dataframe имеют один и тот же тип, как в примере df2, вы можете явно указать Pandas создать копию, установив параметр copy=True.

Заключение

В этой статье вы узнали, как транспонировать DataFrame в Pandas. Вы научились использовать как атрибут .T, так и метод .transpose(). Также вы познакомились с тем, что такое транспонирование и как различные типы данных могут влиять на результат.

Чтобы узнать больше о функции транспонирования в Pandas, ознакомьтесь с официальной документацией по этой ссылке.

Last updated