-
[Pandas] 데이터프레임에서 값 검색 후 항목 위치 찾아보는법Python/Pandas, Numpy 2023. 7. 21. 15:22반응형
판다스 데이터프레임에서 특정 값과 일치하는 항목의 위치 찾아보는법
파이썬(Python)의 대표적인 표 형태의 데이터를 편집할 수 있는 패키지 판다스(Pandas)에서는 엑셀에서 가능한 거의 모든 작업을 할 수 있습니다. 그중에서는 강력한 색인 기능도 빼놓을 수 없는데요, 특정한 조건을 만족하는 값들을 찾는것부터 시작해, 어떤 표의 정보를 이용해서 다른 표를 색인할 수 있는 정도의 인덱싱과 데이터베이스(Database) 뺨치는 병햡 기능까지도 있습니다.
그런데, 판다스에서는 유독 특정 값을 기준으로 위치를 검색하는 기능은 찾아보기 어려운데요, 이번에는 판다스 데이터프레임에서 특정한 값을 기준으로 이와 일치하는 열(또는 행)이 어디있는지 위치를 찾아보는 방법을 살펴보도록 하겠습니다.
이 작업에 사용된 데이터는 서울특별시_자치구단위 서울생활인구(내국인)을 이용하였으며, 출처는 공공데이터포털의 해당 페이지를 참고해 보시기 바랍니다.
# 패키지 및 데이터 불러오기 import pandas as pd df = pd.read_csv('./data/행정동 단위 서울 생활인구(내국인).csv', encoding='cp949')
df.head()
기준일ID 시간대구분 행정동코드 총생활인구수 남자0세부터9세생활인구수 남자10세부터14세생활인구수 남자15세부터19세생활인구수 남자20세부터24세생활인구수 남자25세부터29세생활인구수 남자30세부터34세생활인구수 ... 여자25세부터29세생활인구수 여자30세부터34세생활인구수 여자35세부터39세생활인구수 여자40세부터44세생활인구수 여자45세부터49세생활인구수 여자50세부터54세생활인구수 여자55세부터59세생활인구수 여자60세부터64세생활인구수 여자65세부터69세생활인구수 여자70세이상생활인구수 0 20230511 0 11110515 15253.3799 650.7377 414.6520 515.4578 350.0254 402.3851 471.2807 ... 465.0751 552.5975 601.3893 766.3309 887.5794 622.5538 687.2532 502.9347 377.2752 1174.6372 1 20230511 0 11110530 13231.8677 324.1177 144.0523 218.4181 287.8783 460.1322 499.4851 ... 488.9799 566.5638 722.7149 591.4965 715.6086 494.3205 512.3795 474.2919 302.5216 1010.7500 2 20230511 0 11110540 3657.1922 62.2375 47.6886 301.6747 210.6128 101.8901 118.7932 ... 127.8790 88.4215 151.5495 185.3269 163.3597 122.1988 129.7738 122.2920 128.7375 271.5989 3 20230511 0 11110550 14084.7064 444.5669 344.7109 526.4751 397.6050 406.4831 326.1517 ... 455.7716 336.9577 568.9316 601.0964 822.6233 579.8408 645.4122 502.9757 412.2953 1132.1768 4 20230511 0 11110560 18013.0781 612.3564 442.9372 555.9117 558.2946 467.1679 408.5140 ... 458.1291 464.3974 693.7365 757.2099 845.5216 808.3471 1042.1708 827.4997 632.9652 1602.5555 5 rows × 32 columns
위 데이터에서 우선은 특정 값에 해당하는 인덱스를 검색하는 방법을 알아보겠습니다. 예를 들어, 위 데이터프레임에서는 47.6886에 해당하는 값이 (2,'남자10세부터14세생활인구수') 위치에 하나 있습니다. 이를 이용해서 47.6886과 일치하는 값은 몇번 인덱스에 있는지를 알아보는 코드를 작성해 봅시다. 값을 이용해서 인덱스를 검색하는 방식인데, 대단한 함수를 사용하는게 아니라 인덱싱을 한번 해 주면 됩니다.
df[df.values == 47.6886].index
Int64Index([2], dtype='int64')
만약에 47.6886 값을 가지고 있는 데이터 중에서
남자25세부터29세생활인구수
정보가 어떻게 되는지를 알고 싶다면(즉, 특정한 column 정보가 필요하다면) 이렇게 검색 조건을 변경해볼 수 있겠습니다.df.loc[df.values == 47.6886, '남자25세부터29세생활인구수']
2 101.8901 Name: 남자25세부터29세생활인구수, dtype: float64
그리고, 위 코드에서 index 대신 columns를 검색할 수 있다면 컬럼명을 손쉽게 알아낼 수 있습니다. 검색 대상을
df
대신df.T
로 설정한다면 똑같은 방식으로 검색을 해도 컬럼을 대상으로 검색하도록 조정이 가능합니다.df.T[df.T.values == 47.6886].index
Index(['남자10세부터14세생활인구수'], dtype='object')
반응형'Python > Pandas, Numpy' 카테고리의 다른 글
[ydata-profiling] 판다스 프로파일링 사용시 파이썬 한글 깨짐 문제 해결하기 (0) 2023.08.28 [Pandas] 파이썬 판다스에서 apply 함수 써보기 (0) 2023.07.06 [Pandas] 판다스 데이터프레임을 읽을 때, thousands 패러미터로 숫자 구분자 콤마를 빼보자 (0) 2023.05.18