데이터 추출 
원하는 조건,범위에 해당하는 데이터를 추출하고자 할때 필요한 과정 

 

 

1) 조건에 따른 데이터 추출하는 법 : df[조건] 

## Q1. 영어 점수가 국어 점수보다 높은 학생
df1[df1["영어"] > df1["국어"]]

## Q2. 학년이 2학년 이상이면서 영어 점수가 90점 이상인 학생
## * 여러 조건식인 경우 괄호 () 로 구분 
df1[(df1["학년"] >= 2) & (df1["영어"] >= 90)]

## Q3. 국어가 80미만이거나 수학이 80 미만인 학생
df1[(df1["국어"] < 80) | (df1["수학"] < 80)]  

## Q4. 이름에 '지' 가 포함된 학생 
df1[df1["이름"].str.contains("지")]

 

2) 라벨을 활용한 데이터 추출 : df.loc[행라벨, 열라벨]

슬라이싱을 사용하는 경우 끝범위를 포함한다. 

# 어른이 10000초과 이거나 어린이가 10000 초과인 데이터(행) 에서
# '날짜', '공휴일', '어른', '어린이', '총계'
# * 행라벨 위치에 조건식이 여러개 -> ()으로 구분 
df.loc[(df["어른"] > 1000) | (df["어린이"] > 1000), ["날짜", "공휴일", "어른", "어린이"]] 


# Q1. 인덱스가 3이고, 컬럼이 어른인 데이터 조회
# 하나의 값(셀)
df.loc[3,"어른"]

# Q2. 인덱스가 3부터 6이고, 컬럼이 어른부터 외국인 조회
df.loc[3:6, "어른":"외국인"]

# Q3. 어른이 1000 초과이고, 어린이가 1000 초과인 행에서 날짜부터 총계 조회 
df.loc[(df["어른"] > 1000) & (df["어린이"] > 1000), "날짜":"총계"]

 

(3) 순서를 기반한 데이터 추출 

df.iloc[행위치, 열위치]  ( .loc와 다르게 인덱스 값을 기준으로 추출한다)

- 열 위치 부분은 생략 가능 (모든 컬럼 조회)
-0은 맨처음 인덱스
- 슬라이싱 사용시 끝 범위는 포함 X (위치 기반)

 

 

데이터 정제 (Dirty Data 처리)

 

Dirty Data )

 : 수집된 원천 데이터는 불완전하거나 부정확한 경우가 많음 

 

Dirty Data 종류 )

- 결측치

- 오류 데이터

- 사용 불가 데이터

- 이상치 

 

 

(1) 데이터 정제 : 정렬하기

# True인 경우 오름차순 (기본) False인 경우 내림차순
df.sort_values("컬럼", ascending= True/False)

 

(2) 데이터 정제 : 인덱스 재지정

# 인덱스 재지정
df.reset_index()

# 기존 인덱스 컬럼 삭제
df.reset_index(drop=True)

 

(3) 데이터 정제 : 데이터 삭제하기 

행이름은 인덱스 값 열이름은 컬럼값 지정 

# axis가 0이면 행삭제 1이면 열삭제 
df.drop(['컬럼1','컬럼2'], axis=1))

# axis 지정없이 조건식에 맞는 행 삭제 
df.drop(조건식.index)

 

 

(4) 데이터 정제 : 컬럼명 변경 

df.rename(columns = {"바꿀이름" : "새이름"})

 

 

결측값 처리 
결측치란 ? 데이터에 값이 없는 것 누락된 것 (분석 시 처리해야할 대상)

 

결측치는 제거 or 대체를 통해 처리할수 있다. > 처리 전 결측치 탐색 필수 

 

(1) 결측치 탐색 isna()

# 결측치를 테이블 형식으로 T/F로 표시
df.isna()

# 각 컬럼별 결측치 개수를 요약 
df.isna().sum()

 

(2) 결측치 대체 fillna() 

# 반영하려면 덮어쓰기 
df["컬럼"].fillna(int(df["대체컬럼"].함수(생략가능)))

 

(3) 결측치 삭제 dropna()

# 결측치가 포함된 행을 삭제 
df.dropna(subset=["컬럼 이름"], ignore_index= )

----------------------------------------------

df.dropna(how= )

# - how = "any" : 하나라도 있으면 삭제 
# - how = "all" : 모든값이 결측이면 삭제 



----------------------------------------------

df.dropna(thresh= )

- 남아 있어야 하는 비결측치 개수 
- how 매개변수와 달리 개수로 디테일하게 제거 
- 

----------------------------------------------

* how와 thresh는 같이 사용 불가

 

데이터 병합 

 

(1) concat() : 여러 데이터를 이어 붙여 하나로 통합 

- 보통 세로로 결합을 많이 실행 

==============================================
pd.concat([데이터프레임(리스트)], axis= , join= , ignore_index=)
==============================================

* axis = 
- 어느 방향으로 합칠것인지 정하는 기준 (0 : 세로방향 , 1 : 가로방향)

* join = 
- 합칠 때의 기준 설정 (inner : 공통된 컬림 끼리만(나머지는 무시), outer : 모든 컬럼을 고려해서)

* ignore_index = 
- 합치고 나서 인덱스를 유지할지, 새로 부여할지 결정 
- True : 새로운 인덱스 부여, False : 원본 데이터프레임의 인덱스를 유지 (Default)

 

 

(2) merge() : 특정 컬럼을 기준으로 결합 

- concat과 달리 가로로만 결합이 가능하다 

==============================================
pd.merge(df1, df2, on= , how=) 
==============================================

* df1, df2 : 리스트 형태가 아닌 두개의 프레임으로만 설정 

* on = 
: 기준이 되는 컬럼 이름 ( 병합 기준 컬럼 )

* how = 
: 각 행을 합칠 때의 방식 ( 4가지 )
( inner : 교집합 , outer : 합집합, left : df1에 있는 모든 데이터를 기준 , right : df2에 있는 모든 데이터를 기준 )

+ Recent posts