지난 포스팅에서는 Pandas 를 이용해 DataFrame을 만들고, 만든 DataFrame을 저장하는 과정에 대해 알아보고 실습해보았습니다. 오늘은 DataFrame에서 행을 중심으로, 그리고 열을 중심으로 선택, 필터링 하는 방법에 대해 알아보겠습니다.
5.Pandas - select, Filter Rows or Columns : 행, 열을 선택 또는 필터하기
우리가 접하는 데이터는 수천 수백개의 행과 열로 이루어진 '빅데이터' 입니다. 이러한 데이터를 한눈에 보기란 쉽지 않기 때문에 사용자가 원하는 조건에 맞는 또는 DataFrame의 행번호 또는 열번호를 이용하여 선택하고 필터링해서 볼 수 있어야 합니다. 그래서 오늘은 행 기준으로 보는 3가지 방법과, 열 기준으로 보는 2가지 방법에 대해 알아보겠습니다.
1) Filter Rows of Pandas Dataframe
먼저 DataFrame에서 원하는 정보를 선택하여 조회하는 방법에는 3가지 방법이 있습니다. index를 이용한 방법, loc 함수를 사용하는 방법, 그리고 조건을 만족하는 정보를 조회하는 방법이 있습니다.
방법1. Filter row by index : 인덱스
첫 번째 방법은 가장 기본적이고 쉽게 이용할 수 있는 index, 즉 행의 번호를 이용하여 조회하는 방법입니다.
DataFrame[start : count]
위와 같은 코드를 바탕으로 작성한 DataFrame을 바탕으로 인덱싱 할 때, DataFrame의 이름과 대괄호에 슬라이싱(:)을 이용하여 시작하는 행번호와 시작하는 행번호로 부터 조회할 정보의 개수를 입력하면 연속하는 객체를 출력할 수 있습니다. 만약 행번호를 입력하지 않을 경우 가장 첫(0) 번째 행 부터 조회할 수 있으며, 개수를 입력하지 않을 경우 시작하는 행번호 부터 조회가 가능합니다. 다만 이 방법의 경우 '연속적인' 객체만을 출력할 수 있다는 단점이 있습니다.
방법2. loc Function : loc 함수
두 번째 방법은 loc 함수를 이용하는 방법입니다. 위에서 알아본 인덱스의 경우 슬라이싱(:)을 이용해 DataFrame에 연속적인 객체에 대해서만 조회할 수 있었다면, loc함수를 이용하면 DataFrmae의 특정 행만을 조회할 수 있는 유용한 방법입니다. 사용하는 방법은 아래와 같습니다.
df.loc[[row1, row2]]
예를들어 위에서 만든 DataFrame에서 John과 Kate의 정보만을 확인하고 싶다면 John의 정보가 있는 행번호인 0과 Kate의 정보가 있는 행번호인 2를 다음과 같이 작성하여 조회할 수 있습니다.
loc의 경우 위 처럼 행 번호뿐만 아니라 다양한 방법으로도, 열과 함께도 인덱싱이 가능합니다. 여기에서는 단순히 행, 열 기준으로 분류하여 필터링하는 방법을 알아보는 것이기 때문에 loc 함수에 대한 소개는 마무리 하지만, 좀 더 자세하고 많은 이야기는 나중에 iloc과 함께 비교 분석하여 다뤄보도록 하겠습니다.
방법3. By column condition : 열 조건
위에 두 방법은 단순히 행번호를 이용한 검색이었다면, 조건식을 이용하는 방법은 사용자가 입력한 조건을 만족하는 정보만을 조회할 수 있는 방법입니다. 예를들어 나이가 25세 이상인사람, 이름이 'Jenny'인 사람 등 다양한 조건으로 조회가 가능합니다.
dataframe[condition]
ex ) 나이가 25세 이상인 사람 조회하기
ex ) 이름이 Jenny인 사람 조회하기
ex) 나이가 30세 이상이거나 직업이 developer인 사람 조회하기
조건이 2개 이상일때는 위의 예제 처럼 논리연산자 (&: and, | : or)를 이용하여 조건을 추가하여 조회할 수 있습니다. 이 뿐만 아니라 pandas의 query 함수를 통해 조건을 만족하는 정보를 조회할 수 있습니다.
dataframe.query('condition')
1) Filter Columns of Pandas Dataframe
방법1. By column name : 열 이름으로 조회하기
DataFrame의 열을 조회하는 가장 단순한 방법은 열 이름으로 조회하는 방법입니다. 이 방법을 사용하려면 먼저 열 이름에 어떤게 있는지 조회해보는게 좋을것 같습니다.
# 열이름 조회
dataframe.columns
본격적으로 알아보기에 앞서 아래 첨부된 csv파일을 다운로드 받은 후 이를 읽어들여 다음과 같은 코드를 작성하여 DataFrame을 만들어 보았습니다. 또한 이를 바탕으로 열 이름도 조회해보았습니다.
여기서 대괄호를 이중으로 묶어 열 이름을 입력하면 조회할 수 있습니다.
dataframe[['col1', 'col2' ]]
ex) 'name', 'age'열 정보를 조회
방법2. filter funtion : filter 함수
위에서 봤던 열 이름으로 조회하는 방법은 열이름을 알아야지만 조회할 수 있습니다. 만약 열 이름이 어떤게 있었는지 df.columns 가 생각이 안난다면 효과적으로 filter 함수를 사용할 수 있습니다.
1) item 옵션
filter 함수에서 item 옵션은 위에서 봤던 열 이름을 입력해 조회하는 방법과 비슷합니다. 열 이름을 알고 있을 때 쓸수 있는 방법입니다.
dataframe.filter(item=['col1', 'col2'])
2) like, axis 옵션
filter 함수의 진가는 like, axis 옵션에서 발휘가 됩니다. 내가 조회하려던 그 열 이름에 'a'가 들어갔던 것 같은데... 뭐더라.. 할때 like 옵션에 like = 'a'를 입력합니다. axis는 중심, 즉 기준값을 입력합니다. 기준값이 0이면 인덱스 즉 행기준이 되며 1이면 열 기준이 됩니다. (열이름을 검색할 용도로 사용한다면 axis = 1이 되겠습니다)
dataframe.filter(like = 'a', axis = 0 or 1)
ex) 열 이름에 'a'가 들어가는 열 정보
* 행 정보를 받아보고 싶다면 이런 방법으로도 쓸수 있을것 같습니다.
3) regex 옵션
regex은 Regular expression의 줄임말로 '정규식'을 의미합니다. like 함수의 경우 단순한 문자 포함여부로 검색한다면 범위가 어마어마 하지만 regex 옵션을 활용하면 좀 더 디테일하게 검색할 수 있습니다. like 함수과 공통점이 있다면 항상 axis 옵션을 함께 사용한다는 점 입니다.
dataframe.filter(regex='condition', axis = 1) # 열 기준 검색
만약 'b'로 끝나는 열의 정보를 찾는다면 다음과 같이 검색할 수 있습니다.
여기서는 단순이 특정 철자만으로 검색했지만 더 많은, 다양한 정보를 담고있는 데이터를 다룰때 매우 유용한 함수라고 생각합니다. 밑에는 regex 옵션을 이용하여 상품을 판매하는 DataFrame에서 id 정보만을 출력하는 예제를 만들어 보았습니다.
1. 예제 데이터 만들기
2. regex를 이용하여 컬럼이 'id'로 끝나는 정보만을 추출합니다.
오늘은 DataFrame에서 행, 열을 중심으로 선택, 필터링 하는 방법에 대해 소개해보았습니다. 위에서 소개한 loc 함수와 마찬가지로 행과 열을 선택하는 방법에 iloc 함수가 있는데 이는 따로 글을 써서 소개해드릴 예정입니다! 포스팅 후 여기에 링크를 걸어 놓도록 하겠습니다. 다음시간에는 DataFrame에서 행을 수정하거나 삭제하는 방법에대해 소개해드리겠습니다.
'Study > Python' 카테고리의 다른 글
[Python]Pandas basic 파이썬 판다스 기초 : 데이터 그룹 만들기, 중복 데이터 삭제 (0) | 2021.08.12 |
---|---|
[Python]Pandas basic 파이썬 판다스 기초 : 행,열 생성 및 수정하기 (1) | 2021.07.14 |
[Python]Pandas basic 파이썬 판다스 기초 : 행,열 삭제 (0) | 2021.06.30 |
[Python] pandas basic 파이썬 판다스 기본 : DataFrame 만들기, 저장하기 (0) | 2021.06.23 |
[Python] pandas basic: 파이썬 판다스 기본: 개념, 데이터 불러오기 (1) | 2021.06.21 |