존챙의 끄적공장
- drop 함수
이 데이터프레임에서 race_ethnicity 행의 'All' 값이 속한 행만 삭제하고 싶으면 어떻게 해야 할까?
drop 함수를 쓰지 않으면 condition=df['race_ethnicity']!='All'이라는 조건을 적용하는 방법도 있지만,, 그래도 함수를 이용해서 풀어보자.
특정한 label이나 해당 축을 삭제하고 싶을 때 쓰는게 drop 함수이며,
기본적인 형태는 df.drop('row or column 이름', axis='index or 0' or 'columns or 1') 이다.
index 값을 지우고 싶을 땐 axis=0, column을 지우고 싶을 땐 axis=1을 붙어주면 되는데, axis를 생략하고 싶으면 df.drop(index='row이름') / df.drop(columns='column이름') 이런식으로 쓰자.
삭제하고 싶은 row나 column의 수가 둘 이상일 땐 ['cow','bird'] 이런 식으로 중괄호 붙여주기.
- 이제 위의 사례를 수행해보자. 'race_ethnicity'가 'All'인 행들을 모두 삭제하려면 먼저 이 행들의 index 번호를 알아야 한다. column 값들은 모두 index를 축으로 정렬되어 있기 때문이다.
A = df2[df2['race_ethnicity'] == 'All'].index-> Int64Index([8, 9, 19, 20, 30, 31, 41, 42], dtype='int64')
A의 출력값으로 위와 같이 All이 속한 모든 index 번호가 정렬되어 나오는 것을 확인할 수 있다.
- 이제 A를 drop 함수에 적용하려면 axis를 index로 걸어서 해야 한다. A가 'All'들의 index 번호를 보유하고 있기 때문이다.
어떤 특정한 조건을 걸고 싶을 땐 A 자리에 데이터프레임이 아닌 인덱스를 제공해야 에러없이 정상적으로 작동하는 것을 꼭 기억하자.
df2.drop(A,axis='index',inplace=True)위의 코드들을 차례대로 실행하고 다시 df2를 출력해보면
이렇게 8, 9, 19, 20, 30, 31, 41, 42번의 'All'이 포함된 모든 열이 삭제된 걸 확인할 수 있다.
앱피아
이전 포스팅에서는 loc()를 이용하여 각 인덱스(label) 값을 바탕으로 데이터를 선별하는 방법에 대해서 살펴봤습니다. 하지만, 생각보다 키값 또는 인덱스 값을 정확히 알고 있는 사람들이 많지 않을 수 있습니다. 따라서, 이번 포스팅에서는 이전 포스팅과는 달리, 숫자를 이용한 범위 지정 또는 데이터를 선택하는 방법에 대해서 살펴보고자 합니다.
이와 같은 숫자를 이용하여 데이터를 선택하거나 범위를 지정하는 방식에 사용되는 함수는 다음과 같습니다.
iloc() - 숫자를 이용한 범위 또는 데이터 선택
그럼 예시를 보면서 하나식 살펴보도록 하겠습니다.
example) 특정 열까지 데이터 출력
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 5), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D','E']) print("~4번째 열까지 출력") print (df.iloc[:4]) | cs |
result)
~4번째 열까지 출력 A B C D E a 0.026009 -0.977460 -0.506913 0.794095 0.566339 b -1.022479 -0.533778 -0.167793 0.185686 -0.753602 c -0.388914 -1.178371 -0.901626 -2.087328 0.595545 d 1.487943 0.287191 -1.001782 0.746699 0.868238 | cs |
iloc[]를 이용할 때도 0부터 시작합니다. 따라서, [:4]를 통해 0, 1, 2, 3에 해당하는 열들을 출력합니다.
그럼 특정 행을 한번 출력해보도록 하겠습니다.
example) 특정 행까지 데이터 출력
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 5), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D','E']) print("~2번째 행까지 출력") print (df.iloc[:,:2]) | cs |
result)
~2번째 행까지 출력 A B a -0.322768 -1.089023 b 0.643058 0.730364 c 0.861823 -1.403163 d -0.119051 0.191363 e 0.997609 -0.376027 f 1.059350 -1.378842 g 1.110402 -0.775568 h -0.150513 1.303761 | cs |
iloc[열, 행] 기반으로 진행이 됩니다. 만약에 인자가 한개만 입력되었다면, 열만 표시가 됩니다. 따라서 행만 출력하시고자 한다면 iloc[:,행범위]을 입력해주셔야 합니다. 그럼 이번에는 좀 더 다른 예시를 살펴보겠습니다. 행열에 대한 특정 범위 및 특정 데이터만 선별해보도록 하겠습니다.
example)
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 5), index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D','E']) print("특정 데이터 선별") print(df.iloc[[1, 3, 5], [1, 3]]) print("특정 범위 데이터 선별") print(df.iloc[1:3,1:3]) | cs |
result)
특정 데이터 선별 B D b 1.104821 1.288467 d -0.035517 -1.084780 f -0.974689 0.426956 특정 범위 데이터 선별 B C b 1.104821 -1.080086 c 0.199188 0.430382 | cs |
특정데이터를 선별할 경우에는 iloc[[열 부분],[행 부분]] 형태로 하셔야 합니다. 그럼 범위를 지정할 경우에는 iloc[열 시작 : 열 끝(열 부분), 행 시작 : 행 끝(행부분)]으로 사용하셔야 합니다.
이번 포스팅에서는 인덱스 방법을 바탕으로 데이터를 선별하고 선택하는 방법에 대해서 살펴봤습니다. 이전 포스팅인 loc를 활용하는 부분과 함께 보는 것도 좋을 것 같습니다. ( 다음 링크 참조)
파이썬[Python] Pandas, DataFrame의 인덱스(label)를 이용한 열, 행 선택 방법(loc)
불러오는 중입니다...혹시 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨 주시길 바랍니다. 감사합니다.