Python

[Python] 2차원 배열 열 추출

비번변경 2022. 7. 14. 18:24

2차원 배열 열 추출

2차원 배열에서 각 행을 추출하는 방법은 간단하다. 2차원 배열은 배열이 원소이기 때문에 각 원소인 배열을 통으로 출력하면 되기 때문이다.

a = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7],
    [8, 9],
]

for i in range(5):
    print(a[i])

그렇다면 배열 내 배열의 원소에 접근해야 하는 열의 경우에는 어떻게 추출할 수 있을까? 방법을 몇 가지 정리해둔다.

 

 

리스트 컴프리헨션

리스트 컴프리헨션을 이용해 각 행에서 n번째의 원소만을 뽑아낸다.

a = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7],
    [8, 9],
]


print([t[0] for t in a])
print([t[1] for t in a])

리스트 컴프리헨션

반복문을 이용해 모든 열을 뽑을 때는 아래와 같이 할 수 있다.

for j in range(len(a[0])):
    print([t[j] for t in a])

 

 

zip 함수 사용

zip 함수는 여러 개의 iterable 한 객체를 인자로 받아, 각 객체가 담고 있는 원소를  튜플의 형태로 접근하는 iterator를 반환한다.

a = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7],
    [8, 9],
]

for p in zip(a[0], a[1]):
    print(p)

zip 함수 예시

즉, a의 모든 행을 zip의 매개변수로 전달하면 열에 해당하는 데이터를 반환받을 수 있다.

a = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7],
    [8, 9],
]

for p in zip(*a):
    print(p)

zip 함수 사용

 

numpy 사용

배열을 numpy의 array로 전환하여 전치(transpose)시킨 후 인덱싱하는 방법도 있다.

import numpy as np

b = np.array(a)
for i in range(len(a[0])):
    print(b.T[i])

numpy 전치

 

 

pandas 사용

2차원 배열을 데이터 프레임으로 변환한 후 각 열을 취하는 방법이다.

import pandas as pd

b = pd.DataFrame(a)
for i in range(len(a[0])):
	print(b[i].to_list())

pandas 사용

 

 

참고 문서

https://maktubi.tistory.com/93

https://www.daleseo.com/python-zip/

https://emilkwak.github.io/python-2d-list-certain-column