[혼공분석] 3주차 - 2

LeeHsss·2025년 1월 25일
0

데이터 분석

목록 보기
5/9
post-thumbnail

03-2. 잘못된 데이터 수정하기

데이터프레임 정보 요약 확인하기 : info() 메서드

  • 데이터프레임 정보를 요약해서 출력해주는 함수
    • info() 메서드를 사용하면 열마다 NaN이 아닌 값의 개수를 확인할 수 있다.

누락된 값 개수 확인하기 : isna() 메서드

  • NaN 값을 직접 카운트 하는 함수, 각 행이 비어있는지를 나타내는 불리언 배열을 반환한다. (비어있는 행은 True로 표시)
    • 이어서 sum() 메서드를 호출하면, 불리언 배열의 True 개수로 비어있는 행 개수를 얻을 수 있다.
    • 반대로 누락되지 않은 값을 카운트 할 때는 nonna() 메서드를 사용한다.

누락된 값으로 표시하기 : None, np.nan

  • 판다스 데이터프레임에서는 정수타입 열에 None을 입력하면 누락된 값으로 인식한다. (NaN으로 출력)
  • 판다스는 NaN을 특별한 실수 값으로 저장하기 때문에 데이터 타입이 float64로 자동으로 바뀐다.
    • 데이터 타입을 바꾸기 위해서는 astype() 메서드를 사용한다. (새로운 데이터프레임을 반환한다.)
    • 딕셔너리 형태로 전달 {'도서권수' : 'int32'}
  • 문자열 타입 열에 None을 입력하면 NaN이 아니라 None 그대로 입력된다.
    • Numpy 패키지의 np.nan을 사용한다. (데이터타입 상관 없이 NaN 값으로 표시할 수 있다.)

누락된 값 바꾸기 (1) : loc, fillna() 메서드

  • isna() 메서드와 loc 메서드를 통해 누락된 값을 원하느 값으로 바꿀 수 있다.

  • fillna() 메서드에 원하는 값을 전달하면 NaN을 대체할 수 있다.

    • ⬇️ 특정 열만 선택해서 NaN을 바꾸려면

      ns_book4['부가기호'].fillna('없음')
       
    • 특정 열의 NaN을 바꾸면서 전체 데이터프레임을 반환하려면 딕셔너리 형태로 fillna() 메서드에 전달한다.

      ns_book4.fillna({'부가기호' : '없음')

누락된 값 바꾸기 (2) : replace() 메서드

  • replace() 메서드는 NaN은 물론 어떤 값도 바꿀 수 있다.

    1. 바꾸려는 값이 하나일 때
      • replace(원래 값, 새로운 값)
    2. 바꾸려는 값이 여러개일 때 (리스트 형식 or 딕셔너리 형식으로 전달)
      • replace([원래 값1, 원래 값2], [새로운 값1, 새로운 값2])
      • replace({'원래 값1' : '새로운 값1', '원래값 2' : '새로운 값2'})
    3. 열마다 다른 값으로 바꿀 때 (딕셔너리 형식으로 전달)
      • replace({'열 이름': '원래 값'}, 새로운 값)
      • 중첩된 딕셔너리로 전달 가능 (여러 개 전달 가능)
        e.g.) ({'열 이름1' : {'원래 값1': '새로운 값1'},
        '열 이름2' : {'원래 값2': '새로운 값2'})

💡 정규 표현식

  • 문자열 패턴을 찾아서 대체하기 위한 규칙 모음
  • 파이썬에서는 replace() 메서드에 정규 표현식을 사용할 수 있다.
    • replace() 메서드에서 정규 표현식을 사용하기 위해서는 regex 매개변수를 True로 설정해야 한다. + 다른 문자열과 구분하기 위해 정규표현식 문자열 앞에 접두사 r을 붙여줘야 한다.
  • 문법

숙제.

필수숙제

위와 같은 데이터프레임에서 'col'열의 합을 계산하는 명령으로 올바르지 않은 무엇인가요?

1. df['col1'].sum()
2. df[['col1']].sum()
3. df.loc[:, df.columns == 'col1'].sum()
4. df.loc[:, [False, False, True]].sum() (💡정답)
	- 불리언 배열의 값에 따라 True에 해당하는 열의 각 합을 구하는 명령이다.

추가숙제

위와 같은 데이터프레임에서 df.replace(r'ba.*', 'new', regex=True)의 결과는 무엇인가요?

문제 해설.) 
- replace() 메서드: 값을 변경할 때 사용 
- r'ba.*': ba 뒤에 하나 이상의 문자열이 존재하는 데이터를 검출하는 정규표현식
- regex=True: replace() 메서드 안에서 정규표현식을 사용하겠다는 명시적인 표현

=> ba 뒤 하나 이상의 문자열이 존재하는 데이터를 검출해서 new로 변경해라
=> bat, bar, bait이 new로 바뀐 1번이 정답이다.

💡정답

profile
조금씩 지식의 영역을 넓혀가는 중이에요...😌

0개의 댓글

관련 채용 정보