빅데이터 분석기사/작업 유형 1 (pd)
데이터 타입 변경 1/2
유방울
2023. 4. 26. 14:04
데이터 타입 변경의 필요성
파일을 읽어 dataframe 생성시 column 별로 dtype이 자동 결정
대부분 숫자는 int or float, 나머지는 object 로 결정
but 자동 결정된 dtype은 제약적인 사용이 있음 잘못됐을 수도 있음
대표적 데이터 타입 변경 함수 : x.astype(), pd.to_timedelta(), pd.to_datatime(), pd.Categorical()
1.
변경내용 1개
# [1-22] df의 'view' 컬럼에 대해 '억'에 대해서는 삭제, '만'에 대해서는 '0000'로 변경하는 작업을 수행한 뒤,
# astype('int64')를 사용하여 데이터 타입을 정수로 변경하고 처음 5개 데이터를 출력합니다.
df['view'].replace({'억': '', '만': '1000'}, regex = True).astype('int64').head()
2.
억, 만으로 변경할 내용이 2개 -> list 혹은 dict 사용
list 사용
# [1-21] df의 'view' 컬럼에 대해 '억'에 대해서는 삭제, '만'에 대해서는 '0000'로 변경하는 작업을 수행한 뒤, 처음 5개 데이터를 출력합니다.
# 변경할 내용이 여러 개 일 경우 두 개의 list 또는 dict 를 사용합니다.
df['view'].replace(['억', '만'], ['', '1000'], regex = True).head(5)
3.
메타문자를 제거, 대체 할시 \ 역슬레쉬를 앞에 적어야 함
변경 내용 동일시 -> 리스트 없이 한 번만 적기
# [1-24] df의 'video' 컬럼에서 '개'와 ','을 제거하는 작업을 수행한 뒤, 처음 5개 데이터를 출력합니다.
# 콤마(,)는 의미가 있는 문자이므로 \(역슬래쉬)를 함께 사용합니다.
# 메타문자 : , . + ? * ^ $ [ ] ... 등 , 메타문자의 기능을 없애기 위해 '\,' '\.'
df['video'].replace(['\,', '개'], ['', ''], regex = True).head()
# 변경할 내용이 동일하다면 리스트 없이 적어도 됨
df['video'].replace(['\,', '개'], '', regex = True).head()
# [1-25] df의 'video' 컬럼에서 '개', ','을 제거하고, astype('int32')를 사용하여 는 작업을 수행한 뒤, 처음 5개 데이터를 출력합니다.
# int 32, 64는 비트 수, 숫자가 클수록 메모리를 많이 사용하고 표현 범위가 넓어짐짐
df['video'].replace(['\,', '개'], '', regex = True).astype('int32').head()
값별 개수 확인
# [1-26] df의 열 중 'category' 컬럼에 대해 값 별 개수를 확인합니다.
# 범주형에서 많이 사용됨
df['category'].value_counts()
4.
replace()로 제거 - 중간에 포함된 값 확인
dict 사용
# [1-27] df의 'category'에 대해 첫글자와 마지막 글자인 '[', ']'을 제거합니다.
# replace를 사용하여 제거할 수 있지만, Accessor 중 str을 사용하여 보도록 합니다.
#df['category'].replace({'\[':'', '\]':''}, regex=True).head() # 첫글자, 마지막 글자가 아니라도 제거함
temp = df['category'].replace({'\[': '', '\]': ''}, regex = True)
temp.value_counts()
5.
accesoor 중 str로 제거 - 첫번째와 마지막 값같이 범위에서 삭제, 중간 값 확인 x
str[1:-1] : str의 첫번째([)를 제외하고 마지막번째(])를 제외하기
df['category'].str[1:-1].astype('category')
요약
# 변경대상 하나
df['subscriber'] = df['subscriber'].replace('만', '0000', regex=True).astype('int64')
# 변경대상 두 개 -> 리스트, 딕셔너리 사용
df['view'] = df['view'].replace({'억':'', '만':'0000'}, regex=True).astype('int64')
# 메타문자 변경 시 역 슬레쉬사용
# repalce()함수 방법1
df['video'] = df['video'].replace(['개', '\,'], '', regex=True).astype('int32')
# 엑설레이터 중 str 방법2
df['category'] = df['category'].str[1:-1].astype('category')
+
엑셀로 저장
index = False : 인덱스는 저장하지 않음
df.to_excel('youtube_v1.xlsx', index = False)