ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 판다스(Pandas) 기초 실습하기(데이터 프레임 생성, 행과 열 추가 및 삭제, ...)
    IT&개발/DataAnalysis 2024. 5. 29. 21:00
    728x90
    반응형

    판다스란?

    판다스(Pandas)

    : 파이썬에서 데이터를 다루고 분석하는 데 사용되는 강력한 라이브러리

    - 주로 표 형식의 데이터를 다루는 데 특화되어 있으며, 데이터를 쉽게 읽고 저장하고 조작할 수 있다.

    - 데이터 프레임(DataFrame)과 시리즈(Series)라는 두 가지 핵심 데이터 구조를 제공한다.

    데이터 프레임(DataFrame)

    : 표 형식의 데이터 구조로, 행과 열로 이루어져 있다.

    - 각 열은 서로 다른 유형의 데이터를 포함할 수 있다.

    - Excel 스프레드시트와 유사하며, 데이터베이스나 CSV 파일에서 데이터를 읽어와 처리하는 데 매우 유용하다.

     

    시리즈(Series)

    : 1차원 배열 형태의 데이터 구조로, 각 데이터와 연결된 인덱스를 가진다. 

    - 특정 열 또는 행의 데이터를 나타내며, 데이터프레임의 열이나 행을 선택하거나 생성할 때 사용된다.

    특성 데이터프레임(DataFrame) 시리즈(Series)
    차원 2차원 데이터 구조(행과 열) 1차원 데이터 구조
    내용 여러 열을 포함하고, 서로 다른 유형의 데이터를 가질 수 있음 단일 열을 포함하며, 동일한 유형의 데이터만 가짐

    실습하기

    1. pandas 모듈 임포트 하기

    import pandas as pd

     

    2. DataFrame 생성하기

    ① 리스트 -> DataFrame

    data = [
        ['변우석', 34, 'ESFJ', '1991-10-31'],
        ['김혜윤', 29, 'ISTJ', '1996-11-10'],
        ['송건희', 28, 'ENFJ', '1997-08-16'],
        ['이승협', 33, 'ESTP', '1992-10-31']]
    
    df = pd.DataFrame(data, columns=['Name', 'Age', 'MBTI', 'Birth'])
    df

     

    ② 딕셔너리 -> DataFrame

    data = {'Name' : ['변우석', '김혜윤', '송건희', '이승협'],
           'Age' : [34, 29, 28, 33],
           'MBTI' : ['ESFJ', 'ISTJ', 'ENFJ', 'ESTP'],
           'Birth' : ['1991-10-31', '1996-11-10', '1997-08-16', '1992-10-31']}
           
    df = pd.DataFrame(data)
    df
      Name Age MBTI Birth
    0 변우석 34 ESFJ 1991-10-31
    1 김혜윤 29 ISTJ 1996-11-10
    2 송건희 28 ENFJ 1997-08-16
    3 이승협 33 ESTP 1992-10-31

    3. 파일 저장하고 불러오기

    ① 파일 저장하기

    df.to_csv('data.csv', index = False)

    - index = False를 하지 않고 저장하면 기본적으로 인덱스 열이 추가되어 저장된다.

      Unnamed: 0 Name Age MBTI Birth
    0 0 변우석 34 ESFJ 1991-10-31
    1 1 김혜윤 29 ISTJ 1996-11-10
    2 2 송건희 28 ENFJ 1997-08-16
    3 3 이승협 33 ESTP 1992-10-31

    - 따라서 인덱스가 파일에 저장되지 않게  일반적으로 'index = False'를 사용하는 것이 좋다.

     

    ② 파일 불러오기

    df = pd.read_csv('data.csv')
    df
      Name Age MBTI Birth
    0 변우석 34 ESFJ 1991-10-31
    1 김혜윤 29 ISTJ 1996-11-10
    2 송건희 28 ENFJ 1997-08-16
    3 이승협 33 ESTP 1992-10-31

    4. 새로운 행과 열 추가하기

    ① 행 추가

    df_new = df.loc[len(df)] = ['서혜원', 32, 'INFJ', '1993-11-22']
    df_new
      Name Age MBTI Birth
    0 변우석 34 ESFJ 1991-10-31
    1 김혜윤 29 ISTJ 1996-11-10
    2 송건희 28 ENFJ 1997-08-16
    3 이승협 33 ESTP 1992-10-31
    4 서혜원 32 INFJ 1993-11-22

     

    ② 열 추가

    df_new['Role'] = ['류선재', '임솔', '김태성', '백인혁', '이현주']
    df_new
      Name Age MBTI Birth Role
    0 변우석 34 ESFJ 1991-10-31 류선재
    1 김혜윤 29 ISTJ 1996-11-10 임솔
    2 송건희 28 ENFJ 1997-08-16 김태성
    3 이승협 33 ESTP 1992-10-31 백인혁
    4 서혜원 32 INFJ 1993-11-22 이현주

    5. 특정 데이터 값 추출하기

    ⓛ 특정 열 추출

    # 시리즈
    df_new['Name']
    
    # type(df_new['Name'])
    # pandas.core.series.Series
    0    변우석
    1    김혜윤
    2    송건희
    3    이승협
    4    서혜원
    Name: Name, dtype: object

    - 괄호를 한 번 하면 시리즈

    # 데이터 프레임
    df_new[['Name']]
    
    # type(df_new[['Name']])
    # pandas.core.frame.DataFrame
      Name
    0 변우석
    1 김혜원
    2 송건희
    3 이승협
    4 서혜원

    - 괄호를 두 번 하면 데이터 프레임

    - 두 개 이상의 열을 추출할 경우 무조건 괄호를 두 번 해줘야 한다.

    df_new[['Name', 'Role']]
      Name Role
    0 변우석 류선재
    1 김혜원 임솔
    2 송건희 김태성
    3 이승협 백인혁
    4 서혜원 이현주

     

    ② 특정 행 추출

    - 인덱스 1, 2번 행의 이름과 나이 추출

    # loc 활용
    df_new.loc[[1, 2], ['Name', 'Age']]
      Name Age
    1 김혜윤 29
    2 송건 28

     

    - 인덱스 1, 4번 행 추출(iloc은 정수 인덱스만 선택 가능)

    # iloc 활용
    df_new.iloc[[1, 4]]
      Name Age MBTI Birth Role
    1 김혜윤 29 ISTJ 1996-11-10 임솔
    4 서혜원 32 INFJ 1993-11-22 이현주

     

    - 30살 이상 행만 추출

    # 조건 필터링 1
    df_filtered = df_new[df_new['Age'] >= 30]
    df_filtered
      Name Age MBTI Birth Role
    0 변우석 34 ESFJ 1991-10-31 류선재
    3 이승협 33 ESTP 1992-10-31 백인혁
    4 서혜원 32 INFJ 1993-11-22 이현주

     

    - MBTI가 E로 시작하거나 F가 들어가 있는 사람의 이름과 MBTI 추출

    # 조건 필터링 2
    df_filterd = df_new[(df_new['MBTI'].str.startswith('E'))|(df_new['MBTI'].str.contains('F'))]
    df_filterd[['Name', 'MBTI']]
      Name MBTI
    0 변우석 ESFJ
    2 송건희 ENFJ
    3 이승협 ESTP
    4 서혜원 INFJ

    6. 특정 행과 열 삭제하기

    * drop() 을 사용할 때 원본 데이터 프레임(df_new)에도 drop 결과를 적용하고 싶다면 inplace = True를 추가하면 된다.

    ① 행 삭제하기

    - 인덱스 1번 행 삭제

    df_drop = df_new.drop(1)
      Name Age MBTI Birth Role
    0 변우석 34 ESFJ 1991-10-31 류선재
    2 송건희 28 ENFJ 1997-08-16 김태성
    3 이승협 33 ESTP 1992-10-31 백인혁
    4 서혜원 32 INFJ 1993-11-22 이현주

     

    - 인덱스 2, 3번 행 삭제

    df_drop = df_new.drop([2, 3])
      Name Age MBTI Birth Role
    0 변우석 34 ESFJ 1991-10-31 류선재
    1 김혜윤 29 ISTJ 1996-11-10 임솔
    4 서혜원 32 INFJ 1993-11-22 이현주

     

    - 나이가 30살 이하인 행 삭제

    df_drop = df_new.drop(df_new[df_new['Age'] <= 30].index)
      Name Age MBTI Birth Role
    0 변우석 34 ESFJ 1991-10-31 류선재
    3 이승협 33 ESTP 1992-10-31 백인혁
    4 서혜원 32 INFJ 1993-11-22 이현주

     

    - MBTI가 E로 시작되는 행 삭제

    df_drop = df_new.drop(df_new[df_new['MBTI'].str.startswith('E')].index)
      Name Age MBTI Birth Role
    1 김혜윤 29 ISTJ 1996-11-10 임솔
    4 서혜원 32 INFJ 1993-11-22 이현주

     

    ② 열 삭제하기

    - 열 한 개 삭제하기

    # axis = 1은 열을 의미
    df_drop = df_new.drop('MBTI', axis = 1)
      Name Age Birth Role
    0 변우석 34 1991-10-31 류선재
    1 김혜윤 29 1996-11-10 임솔
    2 송건희 28 1997-08-16 김태성
    3 이승협 33 1992-10-31 백인혁
    4 서혜원 32 1993-11-22 이현주

     

    - 열 두 개 이상 삭제하기

    df_drop = df_new.drop(['MBTI', 'Age'], axis = 1)
      Name Birth Role
    0 변우석 1991-10-31 류선재
    1 김혜윤 1996-11-10 임솔
    2 송건희 1997-08-16 김태성
    3 이승협 1992-10-31 백인혁
    4 서혜원 1993-11-22 이현주

     

    728x90
    반응형
Designed by Tistory.