Skiptu um línur og dálka í tvívíða fylki af Python listagerð

Viðskipti

Hefðbundin Python listategund getur táknað tvívítt fylki með lista yfir lista.

Þessi hluti útskýrir hvernig á að skipta um raðir og dálka í þessu tvívíðu fylki.

    1. Umbreyttu í NumPy fylki
    2. .TLögleiða með þessu.
    1. pandas.DataFrameBreyttu í þetta
    2. .TLögleiða með þessu.
  • Lögfærsla með innbyggðri aðgerð zip()

Það er auðveldara að nota NumPy eða pöndur, en ef þú vilt ekki flytja inn NumPy eða pöndur bara fyrir lögleiðingu, geturðu notað zip() aðgerðina til að flytja inn.

Upprunalega tvívíddar fylkið er skilgreint sem hér segir

import numpy as np
import pandas as pd

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

Umbreytt í NumPy fylki ndarray og umfært með .T

Búðu til NumPy fylki ndarray úr upprunalegu tvívíðu fylkinu og fáðu yfirfærða hlutinn með .T eigindinni.

Ef þú vilt hafa Python lista-gerð hlut í lokin, umbreyttu honum frekar í lista með tolist() aðferðinni.

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

Auk .T eigindarinnar er einnig hægt að nota ndarray aðferðina transpose() og fallið numpy.transpose().

Umbreytt í pandas.DataFrame og yfirfært með .T

Búðu til pandas.DataFrame úr upprunalegu tvívíðu fylkinu og fáðu yfirfærða hlutinn með .T eigindinni.

Ef þú vilt hafa Python list-gerð hlut í lokin, fáðu numpy.ndarray með values ​​eigindinni og breyttu því síðan í lista með tolist() aðferðinni.

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

Lögfærsla með innbyggðri aðgerð zip()

Umbreytir tvívíða fylki með því að nota innbyggðu fallið zip().

zip() er fall sem skilar endurtekningu sem dregur saman þætti margra endurtekningar (listar, tuples, osfrv.). Það er notað þegar margir listar eru keyrðir í for-lykkju, til dæmis.

Að auki notar aðgerðin kerfi þar sem hægt er að stækka listann og fara framhjá ef aðgerðarröksemdin er merkt með stjörnu.

Innleiðingar má gera sem hér segir.

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

Eins og það er, eru þættirnir inni tuples. Þess vegna, ef þú vilt gera það að lista, notaðu list(), sem breytir tuple í lista í listaskilningi.

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

Eftirfarandi er skref fyrir skref sundurliðun á ferlinu.

Hlutir listans eru stækkaðir með stjörnu, stækkuðu þættirnir eru flokkaðir saman með zip() fallinu og síðan er túllinu breytt í lista með listaskilningi.

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