danuri
오늘의 기록
danuri
전체 방문자
오늘
어제
  • 오늘의 기록 (307)
    • java (150)
      • java (33)
      • spring (63)
      • jpa (36)
      • querydsl (7)
      • intelliJ (9)
    • kotlin (8)
    • python (24)
      • python (10)
      • data analysis (13)
      • crawling (1)
    • ddd (2)
    • chatgpt (2)
    • algorithm (33)
      • theory (9)
      • problems (23)
    • http (8)
    • git (8)
    • database (5)
    • aws (12)
    • devops (10)
      • docker (6)
      • cicd (4)
    • book (44)
      • clean code (9)
      • 도메인 주도 개발 시작하기 (10)
      • 자바 최적화 (11)
      • 마이크로서비스 패턴 (0)
      • 스프링으로 시작하는 리액티브 프로그래밍 (14)
    • tistory (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 마이크로서비스패턴
  • 도메인 주도 설계
  • 자바 최적화
  • POSTGIS
  • CICD
  • reactive
  • Kotlin
  • Jackson
  • Thymeleaf
  • S3
  • RDS
  • connection
  • Spring
  • mockito
  • DDD
  • Database
  • Bitmask
  • SWAGGER
  • Saving Plans
  • 등가속도 운동
  • ChatGPT
  • JPA
  • gitlab
  • docker
  • Security
  • PostgreSQL
  • AWS
  • Java
  • 트랜잭션
  • nuribank

최근 댓글

최근 글

hELLO · Designed By 정상우.
danuri

오늘의 기록

[Pandas] str.extract를 사용한 데이터 전처리 + 결측값 핸들링하기
python/data analysis

[Pandas] str.extract를 사용한 데이터 전처리 + 결측값 핸들링하기

2021. 8. 25. 20:32

 

사용 데이터

MovieLens 영화 데이터 -> ml-latest-small.zip -> movies.csv

https://grouplens.org/datasets/movielens/

 

import pandas as pd

movies = pd.read_csv('[파일 경로]/movies.csv', index_col='movieId')

 

 

 

 

 

판다스에서 문자열 관련 함수를 사용하거나 전처리를 하기 위해서는 str을 붙여주어야 한다.

 

그중 원하는 문자열을 추출하는 extract 함수에 대해 알아보겠다.

 

개봉연도 데이터 정제하기(데이터 전처리, Preprocessing)

movies 데이터의 title에서 괄호 ( ) 안의 연도 4자리를 추출하고 싶을 때, 정규 표현식을 사용하면 편리하다.

 

movies['year'] = movies['title'].str.extract('(\(\d\d\d\d\))')

str.extract('([정규표현식])') <- 바로 이 위치에 추출하고 싶은 문자열의 정규표현식을  대입하면 된다.

바로 숫자 4자리를 추출하지 않는 이유는 [Star Wars 1995]처럼 괄호 안의 연도가 아닌 title 자체에 숫자 4자리가 포함될 수도 있기 때문이다.

우선 (1995) 처럼 괄호를 포함한 연도를 추출하고,

 

movies['year'] = movies['year'].str.extract('(\d\d\d\d)')

추출한 year 컬럼에서 그 안의 연도를 다시 추출한다.

 

<결과>

 

year 컬럼이 정상적으로 추가되었다.

 

컬럼 목록 보기

movies['year'].unique()

어떤 데이터가 추출되었는지 중복 없이 확인할 수 있다.

 

<결과>

array(['1995', '1994', '1996', '1976', '1992', '1967', '1993', '1964',
       '1977', '1965', '1982', '1990', '1991', '1989', '1937', '1940',
       '1969', '1981', '1973', '1970', '1955', '1959', '1968', '1988',
       '1997', '1972', '1943', '1952', '1951', '1957', '1961', '1958',
       '1954', '1934', '1944', '1960', '1963', '1942', '1941', '1953',
       '1939', '1950', '1946', '1945', '1938', '1947', '1935', '1936',
       '1956', '1949', '1932', '1975', '1974', '1971', '1979', '1987',
       '1986', '1980', '1978', '1985', '1966', '1962', '1983', '1984',
       '1948', '1933', '1931', '1922', '1998', '1929', '1930', '1927',
       '1928', '1999', '2000', '1926', '1919', '1921', '1925', '1923',
       '2001', '2002', '2003', '1920', '1915', '1924', '2004', '1916',
       '1917', '2005', '2006', '1902', nan, '1903', '2007', '2008',
       '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016',
       '2017', '2018', '1908'], dtype=object)

 

결측값 핸들링하기

year의 목록을 보면 nan이라는 값이 끼어 있는 것을 확인할 수 있다. 이는 결측값으로서 연도가 없는 등의 여러 이유로 인해 연도를 추출할 수 없는 경우를 말한다.

 

데이터를 처리할 때는 이러한 결측값들을 따로 처리해주는 것이 매우 중요하다.

 

결측값 확인

# Not a Number, 결측치
movies[movies['year'].isnull()]

movies에서 year가 nan인 값만을 확인한다.

 

<결과>

 

결측값 처리

movies['year'] = movies['year'].fillna('2050')

year가 nan인 값들을 모두 2050으로 채운다.

2050 역시 해당 영화의 개봉연도는 아니지만 적어도 nan 값을 대체하는 것만으로 의미가 있다.

 

'python > data analysis' 카테고리의 다른 글

[Pandas] seaborn - heatmap을 사용한 데이터 상관관계 시각화  (0) 2021.08.26
[Pandas] get_dummies를 사용한 수치화된 데이터 생성  (0) 2021.08.26
[Pandas] apply 함수를 사용한 데이터 분석  (0) 2021.08.25
[Pandas] seaborn을 사용한 데이터 시각화  (0) 2021.08.25
[Pandas] csv 파일 읽기 및 쓰기  (0) 2021.08.25
    'python/data analysis' 카테고리의 다른 글
    • [Pandas] get_dummies를 사용한 수치화된 데이터 생성
    • [Pandas] apply 함수를 사용한 데이터 분석
    • [Pandas] seaborn을 사용한 데이터 시각화
    • [Pandas] csv 파일 읽기 및 쓰기
    danuri
    danuri
    IT 관련 정보(컴퓨터 지식, 개발)를 꾸준히 기록하는 블로그입니다.

    티스토리툴바