범위선택


1
import pandas as pd
1
df = pd.read_csv('korean-idol.csv')

1. 단일 column을 선택하는 방법

  • df_name [ 'col_name ’ ]
  • df_name [ "col_name " ]
  • df_name .col_name
1
df.head()
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745
3 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928
1
df['이름']
1
df["이름"]
1
df.이름
0       지민
1     지드래곤
2     강다니엘
3        뷔
4       화사
5       정국
6       민현
7       소연
8        진
9      하성운
10      태연
11     차은우
12      백호
13      JR
14      슈가
Name: 이름, dtype: object



2. index & column 범위 선택 (range selection)

1
df
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745
3 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928
5 정국 방탄소년단 빅히트 남자 1997-09-01 178.0 A 5208335
6 민현 뉴이스트 플레디스 남자 1995-08-09 182.3 O 4989792
7 소연 아이들 큐브 여자 1998-08-26 NaN B 4668615
8 방탄소년단 빅히트 남자 1992-12-04 179.2 O 4570308
9 하성운 핫샷 스타크루이엔티 남자 1994-03-22 167.1 A 4036489
10 태연 소녀시대 SM 여자 1989-03-09 NaN A 3918661
11 차은우 아스트로 판타지오 남자 1997-03-30 183.0 B 3506027
12 백호 뉴이스트 플레디스 남자 1995-07-21 175.0 AB 3301654
13 JR 뉴이스트 플레디스 남자 1995-06-08 176.0 O 3274137
14 슈가 방탄소년단 빅히트 남자 1993-03-09 174.0 O 2925442

2-1. 단순 index에 대한 범위 선택

1
df[:3]
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745
1
df.head(3)
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745

2-2. index & column 범위선택 – loc

df_name .loc [행(index) 범위, (열)column 범위]

  • 행 범위는
    “:”
    “:b”
    “a:b”
    등 형식을 사용

  • 열 범위는
    'column name
    ['column name1 ', 'column name2 ']
    'column name1 ’ : 'column name2
    등 형식을 사용

주의:

  • pandas의 loc에서 범위 a : b는 index a & index b 모두 포함
  • numpy에서는 index a 포함, index b 미포함
1
df.loc[:, '이름']
0       지민
1     지드래곤
2     강다니엘
3        뷔
4       화사
5       정국
6       민현
7       소연
8        진
9      하성운
10      태연
11     차은우
12      백호
13      JR
14      슈가
Name: 이름, dtype: object
1
df.loc[:, ['이름', '생년월일']]
이름 생년월일
0 지민 1995-10-13
1 지드래곤 1988-08-18
2 강다니엘 1996-12-10
3 1995-12-30
4 화사 1995-07-23
5 정국 1997-09-01
6 민현 1995-08-09
7 소연 1998-08-26
8 1992-12-04
9 하성운 1994-03-22
10 태연 1989-03-09
11 차은우 1997-03-30
12 백호 1995-07-21
13 JR 1995-06-08
14 슈가 1993-03-09
1
df.loc[3:8, ['이름', '생년월일']]
이름 생년월일
3 1995-12-30
4 화사 1995-07-23
5 정국 1997-09-01
6 민현 1995-08-09
7 소연 1998-08-26
8 1992-12-04
1
df.head()
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745
3 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928
1
df.loc[2:5, '이름':'생년월일']
이름 그룹 소속사 성별 생년월일
2 강다니엘 NaN 커넥트 남자 1996-12-10
3 방탄소년단 빅히트 남자 1995-12-30
4 화사 마마무 RBW 여자 1995-07-23
5 정국 방탄소년단 빅히트 남자 1997-09-01

2-3. index & column 범위선택 – iloc (position으로 색인)

행(index) 범위 선택은 loc와 동일

열(column) 범위는 'column 명’대신 column position을 사용

  • 행 범위는
    “:”
    “:b”
    “a:b”
    등 형식을 사용

  • 열 범위는
    “c”
    “[c, d]”
    “c:d”
    등 형식을 사용

주의:

  • pandas의 iloc에서 범위 a : b는 index a 포함, index b 미포함 (numpy와 동일)
  • pandas의 loc에서 범위 a : b는 index a & index b 모두 포함
1
df.iloc[:, [0, 2]]
이름 소속사
0 지민 빅히트
1 지드래곤 YG
2 강다니엘 커넥트
3 빅히트
4 화사 RBW
5 정국 빅히트
6 민현 플레디스
7 소연 큐브
8 빅히트
9 하성운 스타크루이엔티
10 태연 SM
11 차은우 판타지오
12 백호 플레디스
13 JR 플레디스
14 슈가 빅히트
1
df.iloc[1:5, [0, 2]]
이름 소속사
1 지드래곤 YG
2 강다니엘 커넥트
3 빅히트
4 화사 RBW
1
df.head()
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745
3 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928
1
df.iloc[1:5, 0:4]
이름 그룹 소속사 성별
1 지드래곤 빅뱅 YG 남자
2 강다니엘 NaN 커넥트 남자
3 방탄소년단 빅히트 남자
4 화사 마마무 RBW 여자


3. index & column 조건범위선택 – Boolean Indexing

Boolean indexing은 Numpy에서의 Boolean indexing과 같은 원리다

1
df.head()
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745
3 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928

3-1. 조건에 만족한 row들의 모든 column을 추출

df [조건 ]

1
df['키'] > 180
0     False
1     False
2     False
3     False
4     False
5     False
6      True
7     False
8     False
9     False
10    False
11     True
12    False
13    False
14    False
Name: 키, dtype: bool
1
df[df['키'] > 180]
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
6 민현 뉴이스트 플레디스 남자 1995-08-09 182.3 O 4989792
11 차은우 아스트로 판타지오 남자 1997-03-30 183.0 B 3506027

3-2. 조건에 만족한 row들의 특정 column들을 추출

방법 1. df_name [조건 ] [column범위 ]

1
df[ df['키'] > 180 ] ['이름']
6      민현
11    차은우
Name: 이름, dtype: object
1
df [ df['키'] > 180 ] [['이름', '키']]
이름
6 민현 182.3
11 차은우 183.0

방법 2. loc를 활용: df_name.loc[ 조건 , column범위 ] 【추천】

1
df.loc[ df['키'] > 180, '이름' ]
6      민현
11    차은우
Name: 이름, dtype: object
1
df.loc[ df['키'] > 180, ['이름', '그룹'] ]
이름 그룹
6 민현 뉴이스트
11 차은우 아스트로
1
df.loc[ df['키'] > 180, '이름' : '성별']
이름 그룹 소속사 성별
6 민현 뉴이스트 플레디스 남자
11 차은우 아스트로 판타지오 남자



4. index & column 조건범위선택 – inis을 활용란 색인

column값이 미리 정의한 list에 속한다는 조건을 걸고자 할 때 사용한다

1
my_condition = ['플레디스', 'SM']
1
df['소속사'].isin(my_condition)
0     False
1     False
2     False
3     False
4     False
5     False
6      True
7     False
8     False
9     False
10     True
11    False
12     True
13     True
14    False
Name: 소속사, dtype: bool
1
df.loc[ df['소속사'].isin(my_condition) ]
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
6 민현 뉴이스트 플레디스 남자 1995-08-09 182.3 O 4989792
10 태연 소녀시대 SM 여자 1989-03-09 NaN A 3918661
12 백호 뉴이스트 플레디스 남자 1995-07-21 175.0 AB 3301654
13 JR 뉴이스트 플레디스 남자 1995-06-08 176.0 O 3274137
1
df.loc[ df['소속사'].isin(my_condition) , ['이름', '소속사'] ]
이름 소속사
6 민현 플레디스
10 태연 SM
12 백호 플레디스
13 JR 플레디스