Транспонирование 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