2023. 5. 11. 14:18ㆍDATA PROGRAMMING/PYTHON
오늘은 데이터 프레임을 다루는 대표적인 파이썬의 라이브러리인 Pabdas에 대해 공부해 보려고 한다.
PANDAS 기본
학습을 위해 pandas에서 기본적으로 제공하는 train.csv 파일을 이용해 보자.
df = pd.read_csv('train.csv') #train.csv가 위치한 경로 지정 !!
df
df에 csv파일을 읽어 저장해 주면 600행 12열의 데이터 프레임 형태로 출력할 수 있다.
다음은 인덱싱과 슬라이싱에 대해 알아보자.
df.loc[0] # Series 형태
df.loc[[0]] # DataFrame 형태
loc[0]를 통해 정보를 불러오면 가장 첫 번째 행을 불러올 수 있고, loc[[0]]을 사용하면 그 행을 데이터프레임 형태로 확인할 수 있다.
df['title']
열에 대한 정보를 가져오려면 리스트 등의 다른 구조와 비슷하게 바로 []를 통해 인덱싱 해주면 된다.
iloc vs loc
쉽게 설명해 iloc는 컴퓨터 입장에서, loc는 사람 입장에서 편하게 설계된 함수이다. loc는 인덱스 번호를 기준으로 데이터를 선택한다면, iloc는 순서를 기준으로 설정한다. 예를 들어 설명하면
df.loc[0]과 df.iloc[0]은 결과가 같을 것이다. 맨 처음 순서에 있는 행의 index가 0이기 때문이다.
df[100:].iloc[0]
#df[100:].loc[0] 이 코드는 에러가 날것이다.
df[100:].loc[100] 첫번째 코드와 같은 결과가 나온다.
df[100:].iloc[0]을 하게 되면 100번째 행부터 데이터 프레임을 다시 만든후 그 중 0번째 행 즉 전체척인 데이터프레임 기준으론 100번째 행을 출력한다. 하지만 df[100:].loc[0]은 df[100:]이라는 새로운 데이터프레임에서 index가 0인 행을 추출하라는 의미이지만 애초에 df[100:]은 100번째 행부터 만들어진 데이터 프레임이기에 0번째 index가 존재하지 않아 에러가 나는 것이다.
조건에 따른 열출력
df['genre'] == '액션'
위와 같은 코드를 작성하면 데이터프레임 전체적으로 genre 열이 액션인지에 따라 True와 False값으로 행마다 출력된다. 위 연산자는 bool 형이기 때문이다. 만약 데이터프레임에서 genre가 액션인 행들을 뽑아서 데이터 프레임 형태로 만들고 싶다면 두 번째 loc에 대해 설명했던 코드를 응용하여
df[df['genre' == '액션']]
위와 같은 코드를 작성하면 된다. 위 내용을 응용하여 여러 가지 조건의 연결에 따른 데이터들을 추출하는 연습을 해보자, 예를 들면 genre가 느와르 이면서 num_staff가 300 이상인 데이터들을 뽑고 싶다면
df[(df['genre'] == '느와르') & (df['num_staff'] >= 300)]
위와 같은 코드를 자성하면 된다. 이 내용을 응용하여 자신이 직접 조건을 만들어 다양한 데이터를 뽑는 연습을 해보자
결측치 제거
결측치란 데이터 중 값이 비어있는 값을 뜻하며, 데이터 분석에서 결측치는 분석을 방해하는 대표적인 요소이다. 이에 결측치가 있는 데이터를 삭제하거나 결측치를 다른 값으로 변환해 주는 등의 조치가 필요하다.
temp = df[df['dir_prev_bfnum'].isnull()]
temp = df[df['dir_prev_bfnum'].isnull() == False]
위와 같이 isnull() 함수를 통해 특정 열에 결측치가 존재하는 경우 bool 형태로 값을 알아낼 수 있고 위에서 공부했던 내용을 응용하여 특정 열에 결측치가 존재하는 행들을 데이터 프레임 형태로 출력할 수 있다. 반대로 해당 열이 결측치가 아닌 행들은 아래와 같은 코드로 출력할 수 있다.
# 결측치 있는 행 혹은 열 제거
df.[df['dir_prev_bfnum'].dropna()]
df.[df['dir_prev_bfnum'].dropna(axis=1)]
# 결측치 값을 다른 값으로 바꾸기
df.[df['dir_prev_bfnum'].fillna(2)]
df.[df['dir_prev_bfnum'].fillna(method='ffill')]
df.[df['dir_prev_bfnum'].fillna(method='bfill')]
결측치는 위와 같은 코드로 처리할 수 있다.
dropna() 코드를 통해 결측치가 있는 행을 통째로 없애거나. dropna(aixs=1)로 열을 없앨 수 있다.
fillna(2)는 결측치 값을 2로 바꾼다.
fillna(method='ffill')은 결측치 값을 직전 행의 값으로 대체한다.
fillna(method='bfill')은 결측치 값을 직후 행의 값으로 대체한다.
'DATA PROGRAMMING > PYTHON' 카테고리의 다른 글
[Python] Class의 정확한 이해와 사용법 (0) | 2023.09.13 |
---|---|
파이썬 NUMPY 이미지 파일 색깔 수정하 (0) | 2023.08.03 |
[파이썬] 클래스가 불균형한 데이터 머신러닝 분류 모델 실습 (0) | 2023.06.04 |
파이썬을 통해 간단하게 학교 성적 평균, 표준편차, 백분위 구하기 (0) | 2023.05.29 |
PYTHON - 생산 및 운영 관리 OR-Tool 활용 Goldratt Problem 풀기 (0) | 2023.03.26 |