본문 바로가기
파이썬/파이썬 데이터 분석, 데이터처리

Pandas) 데이터 분석 7편, 데이터 필터링, and 및 or 등 다양한 조건, nan 처리

by SeH_ 2023. 1. 15.
반응형

나도코딩 유튜브 + 외주 자료를 참고하여 만든 자료입니다. 


 

조건에 해당하는 데이터를 가져오는 실습을 진행합니다.

1. 간단하게 시리즈 방식으로 조건에 맞는 데이터 가져오기

print(df['키']>= 185)

2. DataFrame을 이용하여 필터링하기

# 필터
filt = df['키']>= 185 

#df[df['키']]>= 185

print(df[filt])
#print(df[~filt]) # 필터 역으로!

3. 조건 이용하여 원하는 칼럼 데이터 필터링하기

print(df.loc[df['키']>= 185, ['이름','수학']])
# row data, colum data 순

# 다양한 조건 
# and 조건
print(df.loc[(df['키'] >= 185) & (df['학교'] == '북산고')])
#키가 185 이상의 북산고 데이터를 가져옴

# or 조건
print(df.loc[(df['키'] <= 170) | (df['키'] >= 200)])

 

import pandas as pd 


df = pd.read_excel('score.xlsx')
df.set_index('순번', inplace = True)


# STR 함수
# 송씨 성만 가진 데이터 뽑기
filt = df['이름'].str.startswith('송')
print(df[filt])
# 태가 들어가는 사람 데이터 뽑기

filt = df['이름'].str.contains('태')
print(df[filt])
print(df[~filt])

langs = ['python','java']

filt = df['SW특기'].str.lower().isin(langs)
print(df[filt])
# 특기가 파이썩 혹은 자바인 사람 뽑는 거임

filt = df['SW특기'].str.contains('Java',na = False)
# nan 데이터에 대해서 False로 인지시킴
print(df[filt])

 

4. None 처리하기(결측치)

 

빈 데이터에서 contains 기능을 사용하면 ValueError가 뜹니다. 

ValueError: Cannot mask with non-boolean array containing NA / NaN values

따라서 None 처리를 해야합니다! 

- contains에서 nan 데이터 처리하는 방법은 정말 많이 사용할 듯합니다. 

na = False : 데이터가 없을 때 조건에 해당되지 않음

na = True : 데이터가 없을 때 조건에 해당됨

 

- str.lower()을 하는 이유는, 문제에서 python,Python 등 대소문자가 난잡하게 되어 있기 때문입니다. 

 

 

dataframe 전체의 NA 데이터를 바꾸는 과정입니다. 

df = df.fillna('') # dataframe 전체의 NA 데이터를 ''으로 채움
df = df.fillna('없음')

 

 

특정 column의 NA 데이터를 바꾸는 과정입니다. 

#특정 column의 Na 데이터를 바꾸고 싶을 때 

df['SW특기'].fillna('없음',inplace=True)
# 이렇게 안하면 sw특기의 값만 가져옴

항상 저는 df를 재선언해서 값을 대입하였기 때문에 inplace를 사용하지 않았는데, 이 부분은 inplace를 사용하지 않으면 값이 다른 데이터가 나옵니다. df['sw특기']의 값을 먼저 가져오고 그 값을 처리하는 것 같습니다. (Series와 동일하게 적용됩니다.) 

inplace를 자주 사용하는 습관을 가져야겠습니다. 

 

 

 

NA 데이터를 포함하는 데이터를 삭제하는 과정입니다.

 

df.dropna(inplace=True) #전체 NaN 포함하는 데이터 삭제

df.dropna(axis = 'index', how = 'any',inplace= True)
#axis : None이 있을 때 row를 지울 지 columns을 지울 지 판단
#how : any : 하나라도 있으면 지우기or all 모든게 row면 지움
print(df)

 

댓글