2020/09/18 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: pandas란? 데이터프레임이란? 시리즈란?
2020/09/19 - [Python/Pandas Tutorial] - [Python] Pandas Tutorial :: read csv, txt file with pandas
행 또는 열을 인덱싱하는 방법은 여러가지가 있는데
1. 위치로 뽑아오는 방법,
2. label (row name, col name) 로 뽑아오는 방법,
3. 어떠한 condition에 만족하는 부분만 뽑아 오는 방법이 있다.
본 포스팅에서 위 세 가지 방법에 대해 indexing 하는 방법을 알아보겠다.
Pandas DataFrame 에서 Indexing 하는 방법
0. Import pandas library
import pandas as pd
1. read csv file :: 실습파일 불러오기
df = pd.read_csv("01. Data/friend_list_no_head.csv",
header=None,
names=['name','age','job'])
> df
name age job
0 John 20 student
1 Jenny 30 developer
2 Nate 30 teacher
3 Julia 40 dentist
4 Brian 45 manager
5 Chris 25 intern
2. rename index :: 실습을 위해 Index name 변경하기
df = df.rename(index={0:"zero",
1:"one",
2:"two",
3:"three",
4:'four',
5:'five'})
> df
name age job
zero John 20 student
one Jenny 30 developer
two Nate 30 teacher
three Julia 40 dentist
four Brian 45 manager
five Chris 25 intern
3. row(recode) indexing
3-1. by integer position
첫 번째 record 만 indexing 하는 방법은 다음과 같다.
df[0:1]
df.iloc[0]
> df[0:1]
name age job
zero John 20 student
> df.iloc[0]
name John
age 20
job student
Name: zero, dtype: object
(참고) loc VS iloc
DataFrame을 인덱싱하는데 loc과 iloc을 많이 사용한다.
이 둘의 차이는 loc은 label(row name, col name) 으로 indexing 하는 것이고, iloc은 integer position으로 indexing 한다는 것이다.
예제 코드는 다음과 같고, 자세한 설명은 본 포스팅에서 예제를 통해 하겠다.
temp
# name age job
# zero John 20 student
# one Jenny 30 developer
# two Nate 30 teacher
temp.loc[['zero','two'],['name','age']]
# name age
# zero John 20
# two Nate 30
temp.iloc[[0,2], 0:2]
# name age
# zero John 20
# two Nate 30
# temp.loc[[0,2], 0:2] ## error
# temp.iloc[['zero','two'],['name','age']] ## error
참고로 그냥 df[0]을 하면 에러가 난다. 0:1로 인덱싱하거나, iloc을 사용한다.
또한, 0:1, 0:3 처럼 이어지지 않고 (0번째, 3번째) 처럼 떨어진 position의 레코드를 인덱싱 하고 싶다면 iloc을 사용해야 한다.
예를 들어 첫 번째, 세 번째 레코드를 위치로 인덱싱하는 방법은 다음과 같다.
> df.iloc[[0,2],:] # or df.iloc[[0,2]]
name age job
zero John 20 student
two Nate 30 teacher
3-2. by label
위치가 아니라 지정된 label 로 인덱싱 하는 방법은 iloc 이 아닌 loc을 사용하면 된다.
> df.loc[['one','five']] # or df.loc[['one','five'],:]
name age job
one Jenny 30 developer
five Chris 25 intern
또는 filter 로도 같은 결과를 낼 수 있다.
주의할 점은 row를 인덱싱 할 때는 axis = 0을 지정해 주고, column을 대상으로 할 때는 axis = 1로 지정해 준다.
df.filter(items=['one','five'], axis=0)
3-3. by row names
row name condition으로 row를 인덱싱하는 방법은 다음과 같다.
예를 들어 row index에 'o' 가 포함된 레코드만 뽑아오고 싶다면 like = 'o' 를 통해 뽑아올 수 있다.
> df.filter(like = 'o', axis = 0)
name age job
zero John 20 student
one Jenny 30 developer
two Nate 30 teacher
four Brian 45 manager
정규표현식으로 원하는 condition을 지정할 수도 있는데, regex = '' 으로 원하는 정규표현식을 넣어주면 된다.
끝자리가 'e'로 끝나는 row 는 다음과 같이 불러온다.
> df.filter(regex='e$', axis = 0)
name age job
one Jenny 30 developer
three Julia 40 dentist
five Chris 25 intern
3-4. by column conditions
컬럼 condition으로 row 를 indexing 하는 방법은 다음과 같다.
예를 들어 나이가 30세 이상인 row만 indexing 하려면 조건을 직접 넣어주면 된다.
SQL 처럼 query를 넣어 줄 수도 있다.
> df[df.age >= 30]
> df.query('age >= 30')
name age job
one Jenny 30 developer
two Nate 30 teacher
three Julia 40 dentist
four Brian 45 manager
두 가지 조건을 지정해 줄 수도 있다.
나이가 30세 이상이고 직업이 manager인 사람은 다음과 같이 뽑을 수 있다.
> df[(df.age >= 30) & (df.job == 'manager')]
> df.query('(age >= 30) & (job == "manager")')
name age job
four Brian 45 manager
단, 주의할 점은 query는 각각의 조건을 괄호로 묶어주지 않아도 되지만, 첫 번째 코드에서 괄호를 빼주면 에러가 나다.
4. column(item) indexing
컬럼을 인덱싱하는 방법도 위와 거의 동일하다. 주의할 점은 axis = 0이 아니라 axis = 1을 넣어 주어야 한다.
4-1. by integer position
원하는 컬럼위 위치 앞에 원하는 row의 위치를 써 주어야 한다.
row 를 전부 다 가지고 오고 싶다면 : 를, 0~3번째 만 가지고 오고 싶다면 0:4를 넣어주면 된다.
> df[:, 0]
zero John
one Jenny
two Nate
three Julia
four Brian
five Chris
Name: name, dtype: object
> df[0:4, 0]
zero John
one Jenny
two Nate
three Julia
Name: name, dtype: object
4-2. by label
axis = 1 in filter
> df.filter(items=['name','job'], axis=1)
name job
zero John student
one Jenny developer
two Nate teacher
three Julia dentist
four Brian manager
five Chris intern
5. indexing row and column
> df.iloc[[1,5], [0,2]]
> df.loc[['one','five'],['name','job']]
name job
one Jenny developer
five Chris intern
참고
www.youtube.com/watch?v=Nu6GIczsOp0&list=PLVNY1HnUlO25etNe08s1H1nIIbbZdJwxA&index=5
'Python > Pandas Tutorial' 카테고리의 다른 글
[Python] Pandas Tutorial :: add row, column (0) | 2020.09.22 |
---|---|
[Python] Pandas Tutorial :: Drop row or column in pandas DataFrame (0) | 2020.09.22 |
[Python] Pandas Tutorial :: Save Pandas Data Frame to CSV file (0) | 2020.09.21 |
[Python] Pandas Tutorial :: Create Data Frame with Dictionary, List (2) | 2020.09.21 |
[Python] Pandas Tutorial :: read csv, txt file with pandas (0) | 2020.09.19 |