[pandas] 데이터프레임 (DataFrame)과 [pandas] pivot_table, groupby로 이어지는 내용입니다.
특히 '[pandas] 데이터프레임 (DataFrame)' 을 꼭 숙지하시기 바랍니다
사용 데이터 : http://bit.ly/ds-korean-idol
Null 값 처리
Null값은 데이터를 처리할 때 반드시 처리해야(수정, 제거...) 하는 값입니다.
심지어 Null의 개념을 만들어낸 당사지도 '몇십 억짜리 실수'라고 할 정도입니다.
Null값 확인
.isna()와 .isnull() 매서드를 활용해 Null값의 여부를 확인할 수 있습니다.
df.isna()
df.isnull()
위처럼 Null값인 데이터를 True로 색인시킵니다.
만일 Null값이 몇 개인지 확인하려면 .isnull( ).sum( )을 하면 됩니다.
이와 상반되게 .notnull( )은 Null값이 없는 데이터를 True로 색인시킵니다.
df.notnull()
.fillna( ) - Null값 대체
.fillna( )는 Null값을 다른 데이터로 바꿔주는 함수입니다
위에서 Null값을 찾았을 때 '키' 속성이 가장 결측치가 많았기 때문에 '키'의 Null값을 바꿔보겠습니다.
# 적용할 속성만 선택해야한다 # inplace로 저장
df['키'].fillna(df['키'].mean(), inplace = True)
# 집계함수 사용
기존에 Null 값이였던 7번과 10번의 '키' 값이 전체 '키'의 평균이 되었습니다.
df.fillna( )로 하면 df의 모든 Null값에 적용되기 때문에 적용할 속성명을 df[' '] 안에 쓰고 fillna()를 사용해야합니다.
.dropna( how = 'all' 'any', axis = 0,1 )
Null값을 바꾸는 것 말고도 제거하는 것도 가능합니다 (추천하지는 않습니다)
how에 'all'은 튜플값 전체가 Null이면 제거 / 'any'는 튜플값 중 하나라도 Null이면 제거.
axis에 0은 행을 제거 1은 열을 제거.
# Null 하나라도 있으면 제거
df.dropna(how = 'any', axis = 0) # 행 제거
type 변환
기본적으로 DataFrame의 type은 <class 'pandas.core.frame.DataFrame'> 이지만.
DafaFrame 안에 들어있는 데이터 값은 속성마다 다를 수 있습니다.
속성별 데이터 타입을 보려면 .dtypes를 사용합니다.
dtypes
df.dtypes
.astype( ) - 타입 변경
타입을 변경하려면 NaN값이 들어있으면 안된다 ▶ fillna로 바꿔라
이미 위에서 '키'의 Null값을 제거했으니 바로 타입을 바꿔보겠습니다.
df['키'].astype(int)
기존의 float였던 '키'값이 정수형인 int로 바뀌었습니다. dtypes로 확인해보세요
datetime 날자 변환
현재 '생년월일' 속성은 날짜를 나타내고 있습니다. 그러나 object, 즉 문자열 타입으로 이루어져 있습니다.
이를 datetime 타입으로 변경해보겠습니다.
pd.to_datetime( )
pd.to_datetime( df [ '날짜속성명' ] )
# 값을 적용시키기 위해 앞에 df[] =
df['생년월일'] = pd.to_datetime(df['생년월일'])
따로 년/월/일 정보를 추출해서 열을 추가할 수 있다. ( from pandas import datetime as dt를 해야 원활하게 됩니다 )
datetime에서 년/월/일 을 따로 추출하려면 .dt.(year, month, day)를 하면 됩니다.
# 열 추가
df['년'] = df['생년월일'].dt.year
df['월'] = df['생년월일'].dt.month
df['일'] = df['생년월일'].dt.day
# 출력
df.loc[0:7,['이름','년','월','일']]
중복 값 처리
drop_duplicates( ) 를 활용해 중복된 값을 처리할 수 있습니다.
( keep = 삭제순서)를 넣어 유지하고 싶은 데이터를 선택할 수 있습니다 (안 넣으면 자동으로 first가 됩니다)
keep = 'first' 는 중복 첫번째 값을 유지합니다 / keep = 'last' 는 중복 마지막 값을 유지합니다.
.droup_duplicates( )
df.drop_duplicates('소속사', keep = 'first')
# 중복 마지막 값을 살릴려면 keep = 'last'
# 첫번째 값을 살릴려면 keep = 'first'
소속사 값에 고유값만 보이지요?
apply lambda 식으로 데이터 가공
lambda는 함수의 선언과 처리를 한줄의 식으로 쉽게 작성할 수 있습니다.
pandas는 apply( ) 함수와 lambda 식을 결합해 DataFrame과 Series의 데이터를 빠르게 가공하는 기능을 제공합니다.
빠르게 lambda를 정리해 보겠습니다.
lambda 매게변수 : return 값
lambda 매게변수 : 값1 if.... else 값2
# 기존 함수
def get_s(a):
if a % 2 == 0:
return '짝수'
else:
return '홀수'
print(f'5는 {get_s(5)}')
# lambda
lambda_s = lambda a : '짝수' if a % 2 == 0 else '홀수'
print(f'5는 {lambda_s(5)}')
.apply( lambda )
apply는 Series나 DataFrame에 좀 더 구체적인 로직을 적용하고 싶은 경우 활용합니다.
성별 값을 남자는 1, 여자는 0으로 바꿔보겠습니다.
fun = lambda sex : 1 if sex =='남자' else 0
df['성별'] = df['성별'].apply(fun)
'Python > Pandas' 카테고리의 다른 글
[pandas] pivot_table, groupby (0) | 2023.03.19 |
---|---|
[pandas] 데이터프레임 (DataFrame) (0) | 2023.03.13 |