IT&개발/DataAnalysis

판다스(Pandas) 기초 실습하기(데이터 프레임 생성, 행과 열 추가 및 삭제, ...)

nimoes._. 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
반응형