Zamień wiersze i kolumny dwuwymiarowej tablicy typu lista Pythona

Biznes

Standardowy typ listowy Pythona może reprezentować tablicę dwuwymiarową jako listę list.

W tym rozdziale opisano, jak zamienić miejscami wiersze i kolumny tablicy dwuwymiarowej.

    1. Przekształć na tablicę NumPy
    2. .TTransponuj z tym.
    1. pandas.DataFramePrzekształć na to
    2. .TTransponuj z tym.
  • Transpozycja za pomocą wbudowanej funkcji zip()

Łatwiej jest użyć NumPy lub pandas, ale jeśli nie chcesz importować NumPy lub pandas tylko w celu transpozycji, możesz użyć funkcji zip() do transpozycji.

Oryginalna tablica dwuwymiarowa jest zdefiniowana w następujący sposób

import numpy as np
import pandas as pd

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

Przekształcono na tablicę NumPy ndarray i transponowano za pomocą .T

Generuje tablicę NumPy ndarray z oryginalnej tablicy dwuwymiarowej i otrzymuje transponowany obiekt z atrybutem .T.

Jeśli chcesz otrzymać obiekt typu lista Pythona, przekonwertuj go na listę za pomocą metody 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'>

Oprócz atrybutu .T można też użyć metody transpose() i funkcji numpy.transpose() ndarray.

Przekształcono na pandas.DataFrame i transponowano za pomocą .T

Wygeneruj pandas.DataFrame z oryginalnej tablicy dwuwymiarowej i uzyskaj transponowany obiekt z atrybutem .T.

Jeśli chcesz na końcu otrzymać obiekt typu lista w Pythonie, pobierz numpy.ndarray z atrybutem values, a następnie przekonwertuj go na listę za pomocą metody 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'>

Transpozycja za pomocą wbudowanej funkcji zip()

Transponuje tablicę dwuwymiarową za pomocą wbudowanej funkcji zip().

zip() jest funkcją, która zwraca iterator podsumowujący elementy wielu iterabiliów (list, tupli, itp.). Jest ona używana na przykład podczas uruchamiania wielu list w pętli for.

Ponadto funkcja wykorzystuje mechanizm, dzięki któremu listę można rozwinąć i przekazać, jeśli argument funkcji jest oznaczony gwiazdką.

Transpozycje można wykonać w następujący sposób.

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'>

W rzeczywistości elementy w środku są tuplami. Dlatego jeśli chcesz, aby była to lista, użyj funkcji list(), która przekształca tuple w listy w notacji list comprehension.

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'>

Poniżej przedstawiono krok po kroku przebieg tego procesu.

Elementy listy są rozszerzane za pomocą gwiazdki, rozszerzone elementy są grupowane za pomocą funkcji zip(), a następnie krotka jest przekształcana na listę za pomocą notacji list comprehension.

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]]