Размяна на редове и колони на двумерен масив от тип списък в Python

Бизнес

Стандартният тип списък на Python може да представи двумерен масив чрез списък от списъци.

В този раздел е обяснено как да размените редовете и колоните на този двумерен масив.

    1. Конвертиране в масив на NumPy
    2. .TТранспонирайте с това.
    1. pandas.DataFrameПреобразувайте в това
    2. .TТранспонирайте с това.
  • Транспониране с вградената функция zip()

По-лесно е да използвате NumPy или pandas, но ако не искате да импортирате NumPy или pandas само за транспониране, можете да използвате функцията zip() за транспониране.

Първоначалният двуизмерен масив е дефиниран, както следва

import numpy as np
import pandas as pd

l_2d = [[0, 1, 2], [3, 4, 5]]

Преобразува се в NumPy масив ndarray и се транспонира с .T

Генериране на NumPy масив ndarray от оригиналния двумерен масив и получаване на транспонирания обект с атрибута .T.

Ако искате накрая да получите обект от тип списък на Python, преобразувайте го допълнително в списък с метода tolist().

arr_t = np.array(l_2d).T

print(arr_t)
print(type(arr_t))
# [[0 3]
#  [1 4]
#  [2 5]]
# <class 'numpy.ndarray'>

l_2d_t = np.array(l_2d).T.tolist()

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

В допълнение към атрибута .T могат да се използват и методът ndarray transpose() и функцията numpy.transpose().

Преобразува се в pandas.DataFrame и се транспонира с .T

Генерирайте pandas.DataFrame от оригиналния двуизмерен масив и получете транспонирания обект с атрибута .T.

Ако искате накрая да получите обект тип Python списък, вземете numpy.ndarray с атрибута values и след това го преобразувайте в списък с метода tolist().

df_t = pd.DataFrame(l_2d).T

print(df_t)
print(type(df_t))
#    0  1
# 0  0  3
# 1  1  4
# 2  2  5
# <class 'pandas.core.frame.DataFrame'>

l_2d_t = pd.DataFrame(l_2d).T.values.tolist()

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

Транспониране с вградената функция zip()

Транспонира двумерен масив, като използва вградената функция zip().

zip() е функция, която връща итератор, който обобщава елементите на множество итератори (списъци, кортежи и т.н.). Тя се използва, когато се изпълняват множество списъци в цикъл for, например.

Освен това функцията използва механизъм, чрез който списъкът може да бъде разширен и предаден, ако аргументът на функцията е маркиран със звездичка.

Транспонирането може да се извърши по следния начин.

l_2d_t_tuple = list(zip(*l_2d))

print(l_2d_t_tuple)
print(type(l_2d_t_tuple))
# [(0, 3), (1, 4), (2, 5)]
# <class 'list'>

print(l_2d_t_tuple[0])
print(type(l_2d_t_tuple[0]))
# (0, 3)
# <class 'tuple'>

В този си вид елементите вътре са кортежи. Затова, ако искате да го превърнете в списък, използвайте функцията list(), която превръща кортежа в списък в нотация за разбиране на списък.

l_2d_t = [list(x) for x in zip(*l_2d)]

print(l_2d_t)
print(type(l_2d_t))
# [[0, 3], [1, 4], [2, 5]]
# <class 'list'>

print(l_2d_t[0])
print(type(l_2d_t[0]))
# [0, 3]
# <class 'list'>

По-долу е представена поетапна разбивка на процеса.

Елементите на списъка се разширяват със звездичка, разширените елементи се групират с функцията zip() и след това кортежът се преобразува в списък с помощта на запис за разбиране на списък.

print(*l_2d)
# [0, 1, 2] [3, 4, 5]

print(list(zip([0, 1, 2], [3, 4, 5])))
# [(0, 3), (1, 4), (2, 5)]

print([list(x) for x in [(0, 3), (1, 4), (2, 5)]])
# [[0, 3], [1, 4], [2, 5]]
Copied title and URL