[서초 AI 칼리지 데이터분석] - (5)

hi_rice·2025년 5월 16일

서초AI칼리지-심화

목록 보기
5/8

Pandas 데이터프레임 활용 - (1)

  1. Sample 데이터 불러오기
  2. 데이터프레임 조작하기
  3. 조건문 활용하여 데이터 조회하기
  4. 데이터 프레임 내 문자열 처리
  5. 그룹 연산 : groupby()

Sample Data 불러오기

  • Pandas 실습을 위해서 Seaborn 라이브러리에서 제공하는 데이터셋 사용
  • pip install seaborn : seaborn 라이브러리 설치
  • seaborn에서 load dataset을 활용하여 연습용 데이터 불러오기
import seaborn as sns   # Seaborn 라이브러리
print(sns.get_dataset_names())
iris = sns.load_dataset('iris')     # iris 라는 이름의 데이터셋 불러오기
iris.head()

DataFrame 조작 +@

  • 특정 열 제거하기 : drop
  • drop() 함수 내에 삭제하려는 column 이름이나 index를 작성
  • axis = 1 : 열을 제거 하는 경우 1, 행을 제거하는 경우 0으로 설정
print('Before : ', iris.columns.tolist())
iris = iris.drop(['petal_width'],axis=1)    #petal_width 컬러 제거
print('After : ', iris.columns.tolist())
  • 특정 열/행의 합 구하기
  • sum() 함수를 활용해 특정 열/행 의 총합을 계산한다.
  • 특정 열에 대한 정보만 얻거나 여러 열의 합을 구할 수도 있다.
  • Arguments
  • axis = 0 : 행(0) 또는 열(1) 중에서 계산을 할 축을 의미
iris.sum()      #iris 데이터의 모든 열마다 합을 계산
  • 중복치 처리 : duplicated()
  • 데이터 내에 존재하는 중복된 행 or 열 확인
  • duplicated() : 중복된 열들을 확인한다
  • sum() 함수와 함께 사용해 중복된 갯수를 얻을 수 있다
iris['species'].duplicated().head()     #붓꽃의 종류가 중복되는지 확인
  • 중복치 처리 : drop_duplicates()
  • 데이터 내에 존재하는 중복된 행 or 열 제거
  • drop_duplicates(column_name_list) : 중복된 행/열을 제거한다
  • Arguments
    - 기준으로 하는 열들의 이름 리스트
    - keep : 중복된 것들 중, 남길 항목 선정 ['first', 'last, False]
iris.drop_duplicates(['petal_length'],keep='first').head()     # petal_length가 같은 행을 모두 제거 + 가장 먼저 등장한 행 남기기

자료형 변환

  • 특정 열의 자료형을 강제로 변경 : astype
  • pandas TrE& : object, int64, float64, bool, datetime, category...
  • 자료형의 효율성 차이가 있거나 자료형이 잘 못 지정된 경우 사용
  • df[변경대상컬럼].astype(변경할_데이터타입)
iris['sepal_width_str'] = iris['sepal_width'].astype(str)   # sepal_width 를 str으로 저장
print(iris['sepal_width_str'])

Indexing

  • 기본적인 조건문 외에 직접 행/ 선택 : loc & iloc
  • index를 사용하여 직접 행이나 열을 선택할 수 있다.
  • loc : 조건문이나 label을 통해 행/열을 선택
  • iloc : index를 기반으로 행/열을 선택
iris.loc[10,'species']      # 10이라는 index를 가지며, 'species'를 column label로 가지는
iris.iloc[10,3]      # 10번 행 index와 column의 3번 index인 'species'를 불러옴
iris.iloc[:,3]      # 1column의 3번 index인 'species'를 모두 불러옴

문자열 처리

  • 공백 제거하기 : str.strip(), Istrip(), rstrip()
  • 문자열 앞/ 뒤에 공백이 들어가 있는 경우 제거
  • strip : 앞/뒤 모두 공백 제거
  • 1&r+ strip() : 앞 또는 뒤의 공백만 제거
  • ex) : df['species'] = df['species'].str.strip()
iris.sepal_width_str

구분자로 문자열 나누기 : str.split(구분자)

  • 구분자를 기준을 특정 컬럼을 여러 컬럼으로 나눈다
  • 예를 들어"abcd@gmail.com"을 '@'로 나눌 경우 'abcd와 'gmail.com' 두 개의 컬럼 생성
  • split 후 strip을 사용하여 에러 방지 가능
iris.sepal_width_str.str.split('.')     # string화 한 sepal_width 를 .를 기준으로 나누기

패턴 찾기

  • str.startswith(pat): 문자열이 pat 으로 시작하는지 여부를 반환 (Bool)
  • str.endswith(pat): 문자열이 pat으로 끝나는지 여부를 반환 (Bool)
  • str.contains(pat) : 문자열이 pat을 포함하는지 여부를 반환 (Bool)
  • str.match(pat:regex) : 정규표현식인 pat을 만족하는지 여부를 반환
iris[iris.species.str.contains('ini')].head()   #ini를 포함하는 virginica만 불러오게 하는 코드

GroupBy

  • 그룹지어 연산하기 : groupby() + agg()
  • groupby 이후 여러 연산/통계를 한번에 구하고 싶은 경우
  • agg() 함수를 한번 더 활용한다.
  • agg()의 인자로 리스트가 오는 경우 : 모든 컬럼에 대해 해당 연산을 모두 진행
  • agg()의 인자가 dict 인 경우 : 해당하는 컬럼마다 dict의 연산만 진행
iris.groupby('species').agg(['mean','var'])      # iris의 species에 따라 그룹을 짓고 mean & var를 구함

그룹지어 연산하기 : groupby() +agg()

  • groupby 이후 여러 연산/통계를 한번에 구하고 싶은 경우
  • agg() 함수를 한번 더 활용한다.
  • agg()의 인자로 리스트가 오는 경우 : 모든 컬럼에 대해 해당 연산을 모두 진행
  • agg()의 인자가 dict 인 경우 : 해당하는 컬럼마다 dict의 연산만 진행
iris.groupby('species').agg({
    'sepal_length' : 'mean',
    'petal_length' : ['var','sum']
})      # iris의 species에 따라 그룹을 짓고 mean & var를 구함

0개의 댓글