2 분 소요

※ Fancy Indexing

# Column Indexing
> df['컬럼명'] # series 형식으로 출력
> df.컬럼명

## 데이터프레임 형식으로 출력
> df.컬럼명.to_frame()
> df[['컬럼명']]

# Slicing
## 기본적으로 row 단위로 slicing 됨.
> df[:3] # index가 0~2인 행 출력 (모든 컬럼)

## index value 기준으로 indexing
> df.index[0]
> df.index[2]


□ loc()

  • location based indexing
  • index value를 이용하여 출력
  • :(콜론)을 사용하여 범위를 지정하여 indexing 가능
    • (주의) index value 기준으로 slicing 하기 때문에, 끝자리 index 값도 함께 출력함
    • (주의) 일반적인 df[ : ] 과 출력 결과가 다름 - 1행이 더 출력됨
  • mask: 조건을 적용하여 indexing 가능
# 기본 구조
> df.loc[행조건, 열조건]
# 해당 index_value를 가지는 데이터프레임의 values 출력
> df.loc[index_value] 
> df.loc[index_value, "컬럼명"] 
> df.loc[[0, 1, 5, 8], ["컬럼명", "컬럼명", ]]

# :(콜론)을 이용한 indexing 예시
> df.loc[3:5, ["컬럼명", "컬럼명"]]


□ iloc()

  • integer-location based indexing
  • 위치인덱스를 사용하여 출력
  • loc와 다르게 끝자리 값은 제외됨
  • 몇 번째인지를 index로 정의
# 기본 구조
> df.iloc[행인덱스조건, 열인덱스조건]
> df.iloc[0]
> df.iloc[[3, 4], [0, 1]]


□ 조건을 적용한 Indexing

# 기본 구조
> df[조건식]
> df.query('조건식')
# 예시
> df["X3"] > 20 # True / False 출력
> df[df["X3"]] > 20 # 컬럼 X3의 value가 20 초과인 값들의 dataframe 전체 출력
> df[df["X3"] % 3 == 0] # 컬럼 X3의 value가 3의 배수인 값들의 dataframe 전체 출력

> df[df["X1"] == 1 & df["X3"] >= 30] # and 조건
> df[df["X1"] == 1 | df["X3"] >= 30] # or 조건

# isin을 이용하여 특정 컬럼의 여러 값들 출력
> df[df["X1"].isin([3, 100, 200])]
# df.query를 이용한 Indexing
> df.query['X1 == 1 and Sex = "male"']
> df.query['X1 == 1 or Sex = "male"']

# isin, in
> df.query('X1.isin([3, 100, 200])')
> df.query('X1 in [3, 100, 200]')

# 변수에 리스트가 저장되어 있을 때
> a = [3, 100, 200]
> df.query('X1 in @a')


■ Index 변경

# 인덱스 몇 개를 바꿀 때
> df.rename({인덱스 : 변경할 인덱스, 인덱스 : 변경할 인덱스, }, inplace = True/False)

# 인덱스 전체를 바꿀 때
> df.index = 변경할 인덱스 리스트

# 특정 컬럼을 인덱스로 설정하고자 할 때
> df.set_index(컬럼명, inplace = True/False)

□ DataFrame의 Index를 column으로 변환

# 현재 인덱스를 열로 변환하고, 그 열을 남기고 싶을 때
> df.reset_index(inplace = True/False)

# 인덱스를 열로 변환하고, 그 열을 삭제하고 싶을 때
> df.reset_index(drop = True, inplace = True/False)


■ 행/열의 추가/제거

# 기본 구조
# 행/열 추가
> pd.concat([df1, df2]) # 행 추가
> df['new_col'] = 추가할  # 열 추가

# 행/열 제거
> df.drop(제거할 인덱스명, axis = 0, inplace = T/F) # 행 제거
> df.drop(제거할 컬럼명, axis = 1, inplace = T/F) # 열 제거

# 행 중복 제거
> df.drop_duplicates()
# e.g.
> df = df.reset_index(drop = True)

# e.g. 행 제거
> df.drop([i for i in range(100, len(df))])

# e.g. 열 추가
> df['Age_Simple'] = df['Age'] // 10 * 10


□ 열 이름 변경

# 열 이름 각각을 바꿀 때
> df.rename({컬럼명 : 변경할 컬럼명, 컬럼명 : 변경할 컬럼명, }, axis = 1, inplace = T/F)

# 열 이름 전체를 바꿀 때
> df.columns = 컬럼 이름 리스트
# 사용 예시
> df.rename({'PassengerId' : 'ID'}, axis = 1)

> df.columns = [i for i in range(12)]

댓글남기기