-
판다스(Pandas) 기초 실습하기(데이터 프레임 생성, 행과 열 추가 및 삭제, ...)IT&개발/DataAnalysis 2024. 5. 29. 21:00728x90반응형
판다스란?
판다스(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반응형'IT&개발 > DataAnalysis' 카테고리의 다른 글
[이것이 데이터 분석이다 with 파이썬] Chapter 00 (0) 2024.03.19