왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 비지도학습
  • tune()
  • 영상처리
  • 영상처리역사
  • get_long_description
  • yolov8
  • UnboundLocalError
  • ckpt_file
  • alibidetect
  • pip install labelme
  • alibi-detection
  • matplotlib
  • numpy
  • maskimage
  • 영상기술
  • imageprocessing
  • 컴퓨터비전
  • 의료이미징
  • unsupervised
  • TensorFlow
  • 기상탐사
  • labelme
  • ComputerVision
  • pytorch
  • OpenCV
  • PYTHON
  • labelme UnocodeDecodeError
  • encoding='utf-8'
  • PIL
  • 딥러닝

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

Python DropNaN 이후 index 에러 해결과정
디버깅 ( 오류 해결 과정 )

Python DropNaN 이후 index 에러 해결과정

2022. 12. 21. 13:13
728x90

위처럼 결측치가 있는 데이터는 ML개발을 할 때 에러가 발생하기 때문에 아래 사진처럼 dropna()를 사용해,

결측치를 제거해주고 개발을 시작했다.

X를 설정 후 문자열 데이터가 들어가있기 때문에, 

X_new = pd.DataFrame()

for name in X.columns :
    print(name)
    # 각 컬럼데이터를 가져온다.
    data=X[name]

    # 문자열인지 아닌지 나눠서 처리하면 된다.
    if data.dtype == object :
        
        # 문자열이니, 갯수가 2개인지 아닌지 파악해서
        # 2개이면 레이블 인코딩, 그렇지 않으면
        # 원핫 인코딩 하도록 코드 작성
        if data.nunique() <= 2 :
            #레이블 인코딩
            label_encoder = LabelEncoder()
            X_new[name]=label_encoder.fit_transform(data)

        else :
            # 원핫 인코딩
            ct = ColumnTransformer ( [('encoder',OneHotEncoder(),[0])],
                       remainder='passthrough')
            col_names=sorted(data.unique())
            X_new[col_names]=ct.fit_transform(data.to_frame())

    else :
        # 숫자 데이터 처리
        
        X_new[name] = data

위와같이 코드를 작성하면,

위 사진과 같이 결측치를 제거하고 작업을 했음에도 결측치가 생기는 것을 볼 수있다.

 

이유부터 말 하자면, 인덱스의 숫자가 dropna를 하면서 뒤죽박죽 되어버렸기 때문이다.

 

그래서 위 코드에서 한줄을 추가해주면 오류를 해결할 수 있다.

 

    data.reset_index(inplace=True,drop=True)

 

X_new = pd.DataFrame()

for name in X.columns :
    print(name)
    # 각 컬럼데이터를 가져온다.
    data=X[name]
    data.reset_index(inplace=True,drop=True)
    # 문자열인지 아닌지 나눠서 처리하면 된다.
    if data.dtype == object :
        
        # 문자열이니, 갯수가 2개인지 아닌지 파악해서
        # 2개이면 레이블 인코딩, 그렇지 않으면
        # 원핫 인코딩 하도록 코드 작성
        if data.nunique() <= 2 :
            #레이블 인코딩
            label_encoder = LabelEncoder()
            X_new[name]=label_encoder.fit_transform(data)

        else :
            # 원핫 인코딩
            ct = ColumnTransformer ( [('encoder',OneHotEncoder(),[0])],
                       remainder='passthrough')
            col_names=sorted(data.unique())
            X_new[col_names]=ct.fit_transform(data.to_frame())

    else :
        # 숫자 데이터 처리
        
        X_new[name] = data

NaN이 사라지고 잘 작동하는 것을 확인할 수 있다.

'디버깅 ( 오류 해결 과정 )' 카테고리의 다른 글

MySQL - 테이블 이름과 MySQL의 키워드가 같을 때 오류 해결방법  (0) 2023.01.17
AWS Lambda Layer ModuleNotFoundError ( 라이브러리 종속성,dependency )  (0) 2023.01.12
PuTTY - AWS EC2 방화벽 설정하기  (0) 2022.12.14
MYSQL - 오류 error : 1062 ["error": "1062 (23000): Duplicate entry '0' for key] 해결방법  (0) 2022.12.08
MySQL - foreign key constraint fails 에러 ERROR CODE : 1451 해결방법  (1) 2022.12.08
    '디버깅 ( 오류 해결 과정 )' 카테고리의 다른 글
    • MySQL - 테이블 이름과 MySQL의 키워드가 같을 때 오류 해결방법
    • AWS Lambda Layer ModuleNotFoundError ( 라이브러리 종속성,dependency )
    • PuTTY - AWS EC2 방화벽 설정하기
    • MYSQL - 오류 error : 1062 ["error": "1062 (23000): Duplicate entry '0' for key] 해결방법
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바