Транспонирование 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)Dataframe df1:
Name Age Birth City Gender
0 Jane 23 London F
1 Melissa 45 Paris F
2 John 35 Toronto M
3 Matt 64 Atlanta M
Dataframe df2:
Age Size
0 1 10
1 2 24
2 3 43
3 4 54
4 5 56Что такое транспонирование?
В линейной алгебре, а значит, и в машинном обучении, транспонирование матрицы означает обмен строк и столбцов местами. Эта операция часто используется при вычислении дисперсии и ковариации в регрессионном анализе.
Транспонированная матрица, например 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)df2's datatypes:
Age int64
Size int64
dtype: object
df2_T's datatypes:
0 int64
1 int64
2 int64
3 int64
4 int64
dtype: objectОзнакомьтесь с другими уроками Python на сайте datagy, включая наше полное руководство по стилизации Pandas и подробный обзор сводных таблиц (Pivot Tables) в Pandas!
Транспонирование DataFrame Pandas с разнородными типами данных
Мы можем видеть, что в исходном dataframe и в его транспонированной версии все типы данных представляют собой int64.
Теперь давайте рассмотрим, что происходит при наличии смешанных типов данных, как в случае с df_1.
df1_T = df1.transpose()
print(df1_T) 0 1 2 3
Name Jane Melissa John Matt
Age 23 45 35 64
Birth City London Paris Toronto Atlanta
Gender F F M MЕсли теперь посмотреть на типы данных этих двух фреймов данных, то можно увидеть, что возвращаются следующие элементы:
df1_T = df1.T
print('df1\'s datatypes:')
print(df1.dtypes)
print('\n')
print('df1_T\'s datatypes:')
print(df1_T.dtypes)df1's datatypes:
Name object
Age int64
Birth City object
Gender object
dtype: object
df1_T's datatypes:
0 object
1 object
2 object
3 object
dtype: objectМы можем видеть, что любой новый столбец, содержащий данные разнородных типов, автоматически получает тип данных object. Имейте это в виду, если вы планируете выполнять какие-либо вычисления над такими столбцами.
Создание копии при транспонировании для смешанных типов данных
По умолчанию, Pandas создаст копию dataframe, если обнаружит смешанные типы данных. Это поведение реализуется неявно, и Pandas автоматически обрабатывает такие случаи.
Однако, если все данные в вашем dataframe имеют один и тот же тип, как в примере df2, вы можете явно указать Pandas создать копию, установив параметр copy=True.
Заключение
В этой статье вы узнали, как транспонировать DataFrame в Pandas. Вы научились использовать как атрибут .T, так и метод .transpose(). Также вы познакомились с тем, что такое транспонирование и как различные типы данных могут влиять на результат.
Чтобы узнать больше о функции транспонирования в Pandas, ознакомьтесь с официальной документацией по этой ссылке.
Последнее обновление