데이터분석

26. Pandas

장수우 2024. 1. 4. 23:57
학습 주제
  • Level 0에서 Pandas 따라하기
주요 학습 내용
- jupyter note북에 더 자세히 정리했습니다.
  • DataFrame
    • df
    • 타입확인
      - type(df)
    • 데이터프레임 구성 확인
      - df.info()
    • 앞쪽 뒤쪽 데이터 확인하기
      - 앞쪽 : df.head(개수)
      - 뒤쪽 : df.tail(개수)
  • Row(행) 데이터를 선택(조회)하기 - index, slice, loc, iloc
    • series로 인덱스 레이블 선택(조회)하기
      - df.loc[[1]]
    • 여러 행 조회하기
      - df.loc[[3, 6, 9] , ["이름", "체중"] ]
    • 범위로 조회하기
      - df.loc[3:7, "이름" : "체중"] 
    • 슬라이싱 기법으로 조회하기
      - df.loc[3:8:2]
      - [3부터 8까지 2단계]
    • 슬라이싱 기법으로 조회하기 2
      - df.loc[:, ['이름', '포지션', '소속', '리바운드']
      - [모든행 선택, ['이름', '포지션', '소속', '리바운드'] <= 선택하고자 하는 열의 이름들]
    • index, location으로 조회하고 싶다면 = iloc
      - df.iloc[3:7, 0:6]
  • Series가 중요한 이유
    - 단일 열 '이름' 조회하기 -> 시리즈 -> 1차원 데이터
    - 조건에 따라 특정 데이터만 조회할 때 시리즈를 사용한다.
    • 딘일 열 조회
      - df['이름']
    • 타입확인
      - type(df.;loc[1]), type(df['이름'])
    • 기술 통계 
      - df.describe() : 간단하게 살펴볼 수 있다.
      - df.describe(include= 'all')
      - 한글 =>가장 많은것 들중 위에서 부터 먼저 발견된것 

  • 문자 탐색
    • str- 문자열 메소드 활용가능
      - df['이름'].str
    • str.contains
      - df['이름'].srt.contains('정')
      - 정을 포함한 값 T/F로 나온다.
    • sum
      - sum(df['이름'].str.contains('정'))  / df['이름'].str.contains('정').sum()  - 둘다 가능하다.
    • 체인형을 지향
      - df['이름'].str.contains('정').sum()
    •  T/F로 이루어진 boolean형 시리즈 또는 배열로 True에 해당하는 값들만 조회할 수 있다.
      - df[df[ 이름'].str.contains('정').sum() ]
  • 특정 위치 인덱스만 탐색
    • 정씨 인가? T/F로 이루어진 시리즈 생성
      - df['이름'].str[0] == '정'
    • 정씨에 해당하는 데이터프레임 생성
      - df[df['이름'].str[0] == '정']]
    • .str.lower()  .str.upper()  .str.startwith() .str.endwith() 처럼 문자열 메소드를 활용할 수 있다.
      - df[df['이름'].str[0] == '정', ['이름', '포지션', '신장', '체중']]
    • 검색한 것을 기준으로 특정 열만 확인하려면
  • 수치 탐색
    • 180보다 큰 사람인 T/F시리즈 만들기
      - df['신장'] > 180
    • 180보다 큰 사람 DataFrame 만들기
      - df[df['신장'] > 180]
  • 데이터프레임 산술연산
    • 모든 선수 신장 100 추가하기
      - df['신장'] + 100
  • 별도의 Dataframe 생성
    • 포지션이 센터에 해당되는 사람만 가진 경우
      - df['포지션'] == '센터'
      - 데이터로 저장하고 싶을 시
        : df_center = df[df['포지션'] == '센터']
    • 이름, 신장, 체중, 패스만 가진 경우
      - df_power = df[['이름', '신장', '체중', '패스']]
  • 연산 후 새로운 데이터프레임 생성
    • df_power 신장을 늘린 시리즈 만들기
      - df_power['신장'].apply(lambdas x : x + 100)
    • 기존 체이블에서 신장 늘린 시리즈를 교체하기
      - df_power = df_power['신장'].apply(lambdas x : x + 100)
    • 패스 능력치 별 평가
      - def check_skill_pass(x):
             if x >= 90:
                   return : '우수'
             elif x >= 70 :
                   return : '보통'
              return ' 미흡;

    • 함수 적용하여 새로운 열 추가하기
      - df_power['패스평가'] =  df_power['패스'].apply(check_skill_pass)
    • 파이썬에서 for과 원본데이터를 조작할 때 의도치 않은 상황
      - numbers = [0, 1, 2, 3, 4, 5]
        for n in numbers:
              print(n)
              numbers.remove(n)
    • 파이썬에서 for을 이용한 유사한 상황 - .copy()나 [:]로 해결
      - numbers = [0, 1, 2, 3, 4, 5]
        for n in numbers.copy()
              print(n)
              numbers.remove(n)
  • 열(col) 삭제
    • del df['열이름'] -> Series
  • 행(Row)삭제
    • drop()으로 삭제 -> 비파괴적인 처리
      - df_power_new.drop(0).head()
    • 비파괴적인 처리기 때문에 1. 저장이 필요
      - df_power_new.drop = df_power_new.drop(0).head()
    • 파괴적인 처리를 위한 2. inplace=True
      - df_power_new.drop(0, inplace = True)
  • 열 이름 변경
    • 비파괴적인 처리 - 원본은 바뀌지 않는다
    • 파괴적인 처리를 위해 inplace=True
  • 정렬
    • 값 정렬 + 비파괴적 처리
      - df_power_new.sort_values(by = '키')
    • 값 정렬 + 파괴적 처리
      - df_power_new.sort_values(by = '키', inplace = True)
    • 값 정렬(내림차순) + 파괴적 처리
      - df_power_new.sort_values(by = '키', inplace = True, ascending = False)
    • index 정렬 + 파괴적 처리
      - df_power_new.sort_values(inplace = True)
  • 얕은 복사 (Shallow Copy) vs 깊은 복사(Deep Copy)
    • 피봇으로 만든 데이터프레임 조회
      - pivot_df_shallow = pivot_df
    • 1. 얕은 복사 2. 깊은 복사
      - 1. pivot_df_shallw = picot_df
      - 2. pivot_df_copy = pivot_df.copy()
    • 얕은 복사는 변경이 일어나면 원본도 변경됨
    • 얕은 복사는 변경이 일어나면 원본도 변경됨 - 메모리 주소 공유, 사실상 변수명만 다른 것
    • 깊은 복사는 별개의 df기에 원본에 영향을 주지 않음
    • deep copy의 변경을 시켜보면 pivot_df_copy는 변했지만
    • pivot_df는 변하지 않는다.

 

학습하면서 어려웠던 내용
  • 주피터 노트북은 처음써보는데 파이썬과 비슷한 것 같아 다행이면서도 쓰는 양식이라등 새로 익힐 것이 많다
반응형

'데이터분석' 카테고리의 다른 글

28. Jupyter- DataFrame  (0) 2024.01.08
27. Jupyter 사용  (1) 2024.01.08
25. 트랜잭션 및 SQL 고급 문법  (0) 2023.12.30
24. JOIN  (1) 2023.12.29
23. GROUP BY & AGGREGATE  (0) 2023.12.29