numpy 배열에서 특정 열 추출


164

이것은 쉬운 질문이지만 MxN 행렬이 있다고 말합니다. 내가하고 싶은 것은 특정 열을 추출하여 다른 numpy 배열에 저장하는 것이지만 잘못된 구문 오류가 발생합니다. 코드는 다음과 같습니다.

extractedData = data[[:,1],[:,9]]. 

위의 줄로 충분할 것 같지만 그렇지 않습니다. 나는 둘러 보았지만이 특정 시나리오와 관련하여 현명한 구문을 찾을 수 없었습니다.

답변:


272

나는 당신이 열을 원한다고 가정 1하고 9? 그게

data[:, [1, 9]]

또는 이름으로 :

data[:, ['Column Name1','Column Name2']]

당신은에서 이름을 얻을 수 있습니다 data.dtype.names...


열 이름으로 어떻게합니까?
Zelphir Kaltstahl

9
data [:, [ 'Column Name1', 'Column Name2']]
코드 어

보기입니까 아니면 사본입니까? 내 병목 현상 이이 라인에 내가 최적화하는 방법을 검색
Fractale

1
이 기능이 더 이상 작동하지 않을 수 있습니까?
PV8

이 구문은 무엇입니까?
부리또

29

해당 코드 스 니펫으로 열 1과 9를 얻으려는 경우 다음과 같아야합니다.

extractedData = data[:,[1,9]]

14

일부 열만 추출하려는 경우 :

idx_IN_columns = [1, 9]
extractedData = data[:,idx_IN_columns]

특정 열을 제외하려는 경우 :

idx_OUT_columns = [1, 9]
idx_IN_columns = [i for i in xrange(np.shape(data)[1]) if i not in idx_OUT_columns]
extractedData = data[:,idx_IN_columns]

9

내가 지적하고 싶은 한 가지는 추출하려는 열의 수가 1 인 경우 결과 행렬 예상대로 Mx1 행렬 이 아니라 대신 추출한 열의 요소를 포함하는 배열입니다.

이를 Matrix로 변환하려면 결과 배열에 reshape (M, 1) 메소드를 사용해야합니다.


2
또한 콜론을 사용하여이를 수행 할 수 있습니다 (예 :) data[:, 8:9]. 여덟 개의 열이 필요하지만 추가 차원을 제거하지는 않습니다.
Jan Kukacka

data [:, 8] 또한 8 번째 열을 선택하고 Mx1 Matrix
StefanMK를

5

다만:

>>> m = np.matrix(np.random.random((5, 5)))
>>> m
matrix([[0.91074101, 0.65999332, 0.69774588, 0.007355  , 0.33025395],
        [0.11078742, 0.67463754, 0.43158254, 0.95367876, 0.85926405],
        [0.98665185, 0.86431513, 0.12153138, 0.73006437, 0.13404811],
        [0.24602225, 0.66139215, 0.08400288, 0.56769924, 0.47974697],
        [0.25345299, 0.76385882, 0.11002419, 0.2509888 , 0.06312359]])
>>> m[:,[1, 2]]
matrix([[0.65999332, 0.69774588],
        [0.67463754, 0.43158254],
        [0.86431513, 0.12153138],
        [0.66139215, 0.08400288],
        [0.76385882, 0.11002419]])

열이 순서대로 정렬 될 필요는 없습니다.

>>> m[:,[2, 1, 3]]
matrix([[0.69774588, 0.65999332, 0.007355  ],
        [0.43158254, 0.67463754, 0.95367876],
        [0.12153138, 0.86431513, 0.73006437],
        [0.08400288, 0.66139215, 0.56769924],
        [0.11002419, 0.76385882, 0.2509888 ]])

2

다음과 같은 목록을 사용하여 ND 배열에서 열을 선택할 때주의해야 할 사항이 하나 더 있습니다.

data[:,:,[1,9]]

예를 들어 하나의 행만 선택하여 차원을 제거하는 경우 결과 배열은 (어떤 이유로 든) 치환 됩니다. 그래서:

print data.shape            # gives [10,20,30]
selection = data[1,:,[1,9]]
print selection.shape       # gives [2,20] instead of [20,2]!!

1

당신이 사용할 수있는 :

extracted_data = data.ix[:,['Column1','Column2']]


2
좋은 답변에는 항상 수행 한 작업과 그 이유를 OP뿐 아니라 향후 SO를 방문한 사람들에게도 설명 할 수 있습니다. 다른 사람들이 이해할 수 있도록 설명을 추가하십시오.
Rucha Bhatt Joshi

-1

나는 여기서 해결책이 더 이상 파이썬 버전의 업데이트와 함께 작동하지 않는다고 생각합니다. 새로운 파이썬 함수로 그것을 수행하는 한 가지 방법은 다음과 같습니다.

extracted_data = data[['Column Name1','Column Name2']].to_numpy()

원하는 결과를 제공합니다.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_numpy.html#pandas.DataFrame.to_numpy에서 찾을 수있는 설명서


문제는 아닌 dataframe하는 NumPy와 배열로 시작
TMrtSmith

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.