기본 개념 정의
판다스 정의
- 데이터를 조작하고 분석하는 데 사용한느 파이썬 라이브러리다.
- 데이터를 표 형태로 분석 가능하다.
- 시리즈와 데이터프레임이란느 두 가지 데이터 형을 사용한다.
데이터프레임
- 판다스의 기본 구조인 자료구조 객체다.
- 시리즈 여러 개를 묶어 데이터 프레임을 만들고, 2차원 배열의 형태다.
- 행 인덱스, 열 이름, 값 으로 구성된다.
판다스 특징
- 대용량 데이터 처리 : 판다스를 활용하면 시리즈와 데이터프레임 자료구조로 대용량 데이터를 빠르게 처리한다.
- 시각성과 편리성 : 데이터 구조가 표 이므로 사용자가 데이터를 알아보기 편리하다.
- 데이터 분석 도구 : 판다스에서 제공하는 기능 중 데이터 분석에 사용하는 기능은 결측치 처리, 관계 연산, 시계열이 있다.
시리즈와 데이터프레임 생성
시리즈 생성
- Series() 함수 이용한다.
- 인덱스를 지정하지 않으면 기본적으로 0, 1, 2가 지정된다.
import pandas as pd
a = pd.Series([1, 2, 3], index = ['a', 'b', 'c'])
print(a)
데이터프레임 생성
- DataFrame() 함수 이용한다.
- 리스트, 딕셔너리, 넘파이 배열을 이용해 만들 수 있다.
- 아래 세 코드는 같은 결과를 만든다.
# 리스트를 이용한 방법
lst = list([['한빛', '남자', '20', '180'],
['한결', '남자', '21', '177'],
['한라', '여자', '20', '160']])
col_names = ['이름', '성별', '나이', '키']
pd.DataFrame(lst, columns=col_names)
# 딕셔너리를 이용한 방법
dic = {'이름':{0:'한빛', 1:'한결', 2:'한라'},
'성별':{0:'남자', 1:'남자', 2:'여자'},
'나이':{0:'20', 1:'21', 2:'20'},
'키':{0:'180', 1:'177', 2:'160'}}
pd.DataFrame(dic)
# numpy 배열 이용한 방법
import numpy as np
arr1 = np.array([['한빛','남자', '20', '180'],
['한결','남자', '21', '177'],
['한라','여자', '20', '160']])
col_names = ['이름','성별','나이','키']
pd.DataFrame(arr1, columns=col_names)
데이터프레임과 csv 파일
- 파일을 불러오기 위해서는 read_csv() 함수 사용
- 파일을 저장하기 위해서는 to_csv() 함수 사용
# 파일 읽어오기
df = pd.read_csv('경로', '구분자')
# 파일 저장하기
df.to_csv('경로', '열 이름', '인덱스', '인코딩')
기본 정보 조회
- 모든 열 이름 조회 : columns
- 열 별 값 개수, 빈도 수 통계 조회 : describe
- 미리보기 : head, tail
데이터프레임 데이터 분석
정렬
- 인덱스를 기준으로 정렬 : sort_index()
- 특정 열을 기준으로 정렬 : sort_values()
- ascending : 오름차순 (default), False인 경우 내림차순
df.sort_index(axis=0, ascending = False)
df.sort_values(by=['나이', '키'], ascending=False)
데이터 조회
- 시리즈로 출력 : 데이터프레임[조건식]
- 데이터프레임으로 출력 : 데이터프레임[[조건식]]
- 인덱스로 데이터 조회 : iloc[행, 열] 함수
# [[]] 이용
df[['이름', '키']]
# iloc 이용
df.iloc[0:3, 1:3]
데이터 조건부 조회
- df[조건]
- isin() 함수, &, |, str.contains() 함수 이용 가능
df[df['성별'] == '여자']
# 복잡한 조건
df[(df['성별'] == '여자') & (df['키'] > 160)]
df[df['이름'].str.contains('봄')]
데이터 통계
- descibe() 함수를 숫자형 데이터가 있는 데이터프레임에 적용하면 수학적 통계를 나타낸다.
# 숫자형 데이터를 이용하기 위한 데이터프레임 생성
list1 = list([['허준호', '남자', 30, 183],
['이가원', '여자', 24, 162],
['배규민', '남자', 23, 179],
['고고림', '남자', 21, 182],
['이새봄', '여자', 28, 160],
['이보람', '여자', 26, 163],
['이루리', '여자', 24, 157],
['오다현', '여자', 24, 172]])
col_names = ['이름', '성별', '나이', '키']
df = pd.DataFrame(list1, columns=col_names)
데이터 갱신
df.loc[4,'키'] = df.loc[4,'키'] + 5
df.loc[[4]]
df.loc[1:3,'키'] = ['모름'] * 3
df
데이터프레임 구조 수정
- set_index() 함수로 중복 데이터가 없는 열을 인덱스로 지정
- drop()으로 행, 열 삭제
- reset_index()로 기본 인덱스 복구
- inplace = True는 해당 함수의 결과를 저장함
df.set_index('이름', inplace=True)
df['보너스'] = df['나이'] * 10000
df
df.drop('보너스', axis=1, inplace=True) # 열
df.drop('이루리', axis=0, inplace=True) # 행
df.reset_index(inplace = True)
df
데이터 치환
- replace() 함수를 이용해 데이터를 다른 값으로 치환
rep_cond = {'성별':{'남자':1, '여자':0}}
df2 = df.replace(rep_cond)
df2
데이터프레임 값 연산
- mean() : 평균
- std() : 표준편차
- merge() : 데이터프레임 합치기
mean_by_gender = df.groupby(by=['성별'], as_index=False)['키'].mean( )
mean_by_gender.rename(columns={'키':'평균 키'}, inplace=True)
std_by_gender = df.groupby(by=['성별'], as_index=False)['키'].std( )
std_by_gender.rename(columns = {'키':'키의 표준편차'}, inplace=True)
new_df = pd.merge(mean_by_gender, std_by_gender)
new_df
퀴즈
0. 다음 표를 판다스 데이터프레임으로 생성하고 시간표 데이터 분석
1. 열 이름과 시간표 데이터를 리스트로 저장
col_names = ['과목번호', '과목명', '강의실', '시간수']
lst = list([['C1', '데이터베이스', 'G401', 3],
['C2', '클라우드', 'G401', 2],
['C3', '파이썬기초', 'G402', 3],
['C4', '인공지능', 'G402', 4],
['C5', 'e스포트', 'G407', 2],
['C6', '비지니스영어', 'G407', 1]
])
2. 시간표 데이터를 데이터프레임 객체 df로 변환하여 CSV 파일로 저장
import pandas as pd
df = pd.DataFrame(lst, columns=col_names)
df.to_csv('./timetable.csv', header=True, index=False, encoding='utf-8')
3 - 1. ‘timetable.csv’ 파일을 데이터프레임 객체 df2로 읽어오기
df2 = pd.read_csv('./timetable.csv', sep=',')
df2
3 - 2. 열 이름이 ‘교수’인 열을 추가, 값으로 ‘김민재’, ‘손흥민’, ‘이강인’, ‘황희찬’, ‘조규성’, ‘박명수’을 저장
df2['교수'] = ['김민재', '손흥민', '이강인', '황희찬', '조규성', '박명수']
df2
4. 강의실을 기준으로 그룹화하여 max( ) 함수로 최대 시간 수를 구하기
max_hour = df2.groupby(by=['강의실'], as_index=False)['시간수'].max( )
max_hour
'Programming > Python' 카테고리의 다른 글
SQL query (0) | 2023.11.29 |
---|---|
MySQL Workbench 사용하기 (1) | 2023.11.23 |
판다스 실제 데이터 활용 (1) | 2023.10.16 |