존챙의 끄적공장
이 데이터프레임에서 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를 축으로 정렬되어 있기 때문이다.
-> Int64Index([8, 9, 19, 20, 30, 31, 41, 42], dtype='int64') A의 출력값으로 위와 같이 All이 속한 모든 index 번호가 정렬되어 나오는 것을 확인할 수 있다. - 이제 A를 drop 함수에 적용하려면 axis를 index로 걸어서 해야 한다. A가 'All'들의 index 번호를 보유하고 있기 때문이다. 어떤 특정한 조건을 걸고 싶을 땐 A 자리에 데이터프레임이 아닌 인덱스를 제공해야 에러없이 정상적으로 작동하는 것을 꼭 기억하자.
위의 코드들을 차례대로 실행하고 다시 df2를 출력해보면 이렇게 8, 9, 19, 20, 30, 31, 41, 42번의 'All'이 포함된 모든 열이 삭제된 걸 확인할 수 있다. 앱피아이전 포스팅에서는 loc()를 이용하여 각 인덱스(label) 값을 바탕으로 데이터를 선별하는 방법에 대해서 살펴봤습니다. 하지만, 생각보다 키값 또는 인덱스 값을 정확히 알고 있는 사람들이 많지 않을 수 있습니다. 따라서, 이번 포스팅에서는 이전 포스팅과는 달리, 숫자를 이용한 범위 지정 또는 데이터를 선택하는 방법에 대해서 살펴보고자 합니다. 이와 같은 숫자를 이용하여 데이터를 선택하거나 범위를 지정하는 방식에 사용되는 함수는 다음과 같습니다. iloc() - 숫자를 이용한 범위 또는 데이터 선택 그럼 예시를 보면서 하나식 살펴보도록 하겠습니다. example) 특정 열까지 데이터 출력
result)
iloc[]를 이용할 때도 0부터 시작합니다. 따라서, [:4]를 통해 0, 1, 2, 3에 해당하는 열들을 출력합니다. 그럼 특정 행을 한번 출력해보도록 하겠습니다. example) 특정 행까지 데이터 출력
result)
iloc[열, 행] 기반으로 진행이 됩니다. 만약에 인자가 한개만 입력되었다면, 열만 표시가 됩니다. 따라서 행만 출력하시고자 한다면 iloc[:,행범위]을 입력해주셔야 합니다. 그럼 이번에는 좀 더 다른 예시를 살펴보겠습니다. 행열에 대한 특정 범위 및 특정 데이터만 선별해보도록 하겠습니다. example)
result)
특정데이터를 선별할 경우에는 iloc[[열 부분],[행 부분]] 형태로 하셔야 합니다. 그럼 범위를 지정할 경우에는 iloc[열 시작 : 열 끝(열 부분), 행 시작 : 행 끝(행부분)]으로 사용하셔야 합니다. 이번 포스팅에서는 인덱스 방법을 바탕으로 데이터를 선별하고 선택하는 방법에 대해서 살펴봤습니다. 이전 포스팅인 loc를 활용하는 부분과 함께 보는 것도 좋을 것 같습니다. ( 다음 링크 참조) 파이썬[Python] Pandas, DataFrame의 인덱스(label)를 이용한 열, 행 선택 방법(loc) 불러오는 중입니다...혹시 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨 주시길 바랍니다. 감사합니다. |