홍동이의 성장일기
[👩💻TIL 2일차 ] 유데미 스타터스 취업 부트캠프 4기 본문
파이썬 데이터분석
17. 딕셔너리 만들고 값 추출하기
딕셔너리
- 키:값이 쌍을 이루어 하나의 항목으로 저장되는 자료형
키 | 값 | |
가능한 자료형 | 숫자, 문자열, 부울, 튜플 | 모든 자료형 |
변경가능여부 | 변경 불가 | 변경 가능 |
중복가능여부 | 중복 불가 | 중복 가능 |
- 키와 값은 콜론으로 구분
- 중괄호 안에 콤마로 구분하여 항목을 저장
- dict로 딕셔너리 만들기
※ 키에 따옴표를 쓰지 않는다.
- 딕셔너리명 = dict(키1=값1, 키2=값2,...,)
- 딕셔너리명 = dict(zip(key리스트, value리스트))
- 딕셔너리명 = dict([(키1,값1),(키1,값2),...,])
- 딕셔너리명 = dict({키1:값1,키2:값2,...,})
- 중복된 key를 사용하여 딕셔너리를 만들면 뒤에 값이 반영된다.
- 인덱스가 아닌 키로 자료에 접근
- 딕셔너리에 키 존재여부 확인하기: key in 딕셔너리명
- 딕셔너리명.get(key, msg)
- 존재하지 않는 key로 추출을 시도해도 오류 발생X
- 존재하지 않는 key로 추출을 시도할 경우 출력할 메세지 설정 가능
18. 딕셔너리 변경하기
딕셔너리의 항목 추가/수정하기
- 딕셔너리명[key] = value: 키가 존재하지 않으면 추가, 존재하면 수정
- 딕셔너리명.setdefault(key, value): 키가 존재하지 않으면 추가, 존재하면 아무일도 일어나지 않음
update로 여러 항목 추가/수정하기
→ 키가 존재하면 수정, 존재하지 않으면 추가
- 딕셔너리명.update(키1=값1, 키1=값2,...)
- 딕셔너리명.update(zip(key리스트, value리스트)
- 딕셔너리명.update([(키1,값1),(키2,값2),...])
- 딕셔너리명.update({키1:값1,키2:값2,...,})
딕셔너리의 항목 삭제하기
- del 딕셔너리명[key]: 해당 키의 항목 삭제
- 딕셔너리명.clear(): 딕셔너리의 모든 항목 삭제
- 딕셔너리명.pop(key, msg): 해당 키의 값 리턴 후 삭제 (키가 존재하지 않을 때는 기본값 반환)
19. 딕셔너리의 키, 값 다루기
딕셔너리의 키, 값을 리스트형태로 가져오기
- 딕셔너리.keys(): 딕셔너리의 key만 리스트 형태로 받아서 사용
- dict_keys 객체로 받아온다.
- 리스트처럼 사용할 수 있지만 리스트는 아니다. - 딕셔너리.values(): 딕셔너리의 valule만 리스트 형태로 받아서 사용
- dict_values 객체로 받아온다. - 딕셔너리.items(): 딕셔너리의 (key, value) 쌍을 리스트 형태로 받아서 사용
- dict_items 객체로 받아온다.
for문에서 딕셔너리의 key, value 사용하기
- for i in 딕셔너리명.keys():
print(i) - for i in 딕셔너리명.values():
print(i) - for i in 딕셔너리명.items():
print(i) - for k,v in 딕셔너리명.items():
print(k,v)
딕셔너리 정렬하기
- sorted(딕셔너리명.keys()): 딕셔너리의 key만 리스트형태로 받아서 사용
- sorted(딕셔너리명.values()): 딕셔너리의 value만 리스트형태로 받아서 사용
- sorted(딕셔너리명.items()): 딕셔너리의 (key, value)를 리스트형태로 받아서 사용
※ .sort()는 지원하지 않는다.
20. 딕셔너리 연습하기
단어장 만들기
# 엔터('')를 입력할 때까지 영어단어,뜻을 입력받아 딕셔너리에 저장
dict_word={}
while True:
input_word = input('영어단어,뜻:')
if input_word=='':
break
eng = input_word.split(',')[0]
kor = input_word.split(',')[1]
dict_word[eng] = kor
dict_word
단어 테스트
# 단어장의 단어들을 모두 테스트
# 맞은 갯수는 별도로 카운트
cnt = 0
for eng, kor in dict_word.items():
answer = input(eng)
if answer==kor:
print('O')
cnt+=1
else:
print('X')
cnt
테스트 결과 출력
print('맞은갯수:',cnt)
print('전체문제수:',len(dict_word))
print('점수:',round(cnt/len(dict_word)*100,1))
21. 함수 만들기
함수: 특정 기능을 구현하기 위한 코드의 묶음
함수 사용 목적
- 크고 복잡한 프로그램을 해결하기 쉬운 작은 단위로 쪼개어 해결한다.
- 반복되는 코드를 함수화하여 코드의 중복을 배제한다.
함수 사용의 효과
- 크고 복잡한 문제를 쉽게 해결할 수 있다.
- 코드의 가독성을 높여 프로그램의 흐름 파악이 용이하다.
- 자주 사용되는 코드를 하나의 함수로 만들어 프로그램 내에서 재사용할 수 있다.
- 프로그램의 디버깅이 용이하다.
함수의 종류
- 내장함수: 파이썬 프로그램에 기본적으로 내장된 함수
import 불필요 - 외장함수: 모듈, 패키지 함수
import하여 사용 - 사용자 정의 함수: 사용자가 만든 함수
기본 함수 정의하고 호출하기
- 함수 정의하기(만들기)
def 함수명():
함수내용
- 함수명은 변수명과 동일한 규칙으로 만들어진다.
- 함수 내용은 들여쓰기 한다. - 함수 호출하기(사용하기)
함수명()
- 함수를 호출하기 전에 함수가 정의되어있어야 한다.
# 함수 정의
def introduce():
print('안녕하세요!')
print('저의 이름은 파이썬입니다.')
# 함수 호출
introduce()
매개변수 전달하기
- 함수 정의하기(만들기)
def 함수명(매개변수1, 매개변수2, ...):
함수내용
- 함수명은 변수명과 동일한 규칙으로 만들어진다.
- 함수 내용은 들여쓰기 한다.
def introduce(name, age):
print('안녕하세요!')
print('저의 이름은, '+name+'입니다.')
print('나이는, '+str(age)+'살입니다.')
introduce('파이썬',20)
introduce('홍길동',21)
# 이름과 나이를 입력받아 생일축하 메시지를 출력하는 함수를 만들고 호출하세요.
name = input('이름:')
age = input('나이:')
def happybirthday(name, age):
print(f'{name}님의 {age}번째 생일을 축하합니다.')
happybirthday(name,age)
22. 함수의 결과값 받아서 사용하기
함수의 결과값 반환하기
- 함수 정의하기(만들기)
def 함수명(매개변수1, 매개변수2, ...):
함수내용
return 결과값
- 반환값은 없거나 1개이다.
※ 반환값이 여러 개인 경우 하나의 튜플로 묶어서 반환된다.
# 두 수를 매개변수로 받아 더한값과 뺀 값을 리턴하는 함수 만들기
def get_plus_minus(n1,n2):
return n1+n2, n1-n2
result = get_plus_minus(1,2)
print(result) # (3, -1)
plus,minus = get_plus_minus(1,2)
print(plus,minus) # 3, -1
- 함수 호출하기(사용하기)
변수 = 함수명(인수1, 인수2, ...)
- 반환값이 있을 때는 변수로 받거나 수식 내에 기술한다.
함수에서 빠져나오기
- return을 만나면 함수에서 빠져나온다.
- 반환할 값이 있다면 값을 반환하고 빠져나오고, 없다면 그냥 빠져나온다.
# 정수를 입력받아 0, 짝수, 홀수 여부를 리턴하는 함수 만들기
def is_odd_even(n):
if n == 0:
result=0
elif n%2==0:
result='짝수'
else:
result='홀수'
return result
is_odd_even(21) # 홀수
# 소수 여부 판단하기 매개변수로 전달받은 수가 소수인지 아닌지 판별하는 함수를 작성하고 호출하세요.
# 소수란 : 1과 자기 자신으로만 나누어 떨어지는 1보다 큰 양의 정수
def is_prime(n):
if n<=1:
return False
for i in range(2,n):
if n%i==0:
return False
return True
is_prime(15) # False
23. 인수 전달방법
위치 인수: 함수에 정의된 매개변수와 순서에 맞게 짝을 맞추어 인수를 전달한다.
- 함수 정의하기(만들기)
def 함수명(매개변수1, 매개변수2, ..., 매개변수n):
함수내용
return 결과값 - 함수 호출하기(사용하기)
변수 = 함수명(인수1, 인수2, ..., 인수n)
def greet(name, msg):
print('안녕',name,msg)
greet('친구','오랜만이야') # 안녕 친구 오랜만이야
디폴트 인수
- 함수 정의하기(만들기)
- 함수를 정의할 때 매개변수에 디폴트값을 지정하면 디폴트값이 지정된 인수를 생략할 수 있다.
- 디폴트 인수는 기본 위치 인수를 다 적은 다음에 적어야 한다.
def 함수명(매개변수1, 매개변수2=디폴트값):
함수내용
return 결과값 - 함수 호출하기(사용하기)
변수 = 함수명(인수1)
※인수2 생략
def greet(name, msg='오랜만이야'):
print('안녕',name,msg)
greet('친구') # 안녕 친구 오랜만이야
greet('친구', '반가워') # 안녕 친구 반가워
키워드 인수: 함수를 호출할 때 인수의 이름을 명시하면 순서를 바꾸어 전달할 수 있다.
- 함수 정의하기(만들기)
def 함수명(매개변수1, 매개변수2):
함수내용
return 결과값 - 함수 호출하기(사용하기)
변수 = 함수명(매개변수2이름=인수2, 매개변수1이름=인수1)
def get_minus(x,y,z):
return x-y-z
print(get_minus(5,10,15)) # -20
print(get_minus(5,z=15,y=10)) # -20
가변 인수: 매개변수에 '*'을 붙이면 여러 개의 인수를 하나의 튜플로 받는다.
- 함수 정의하기(만들기)
def 함수명(*매개변수):
함수내용
return 결과값 - 함수 호출하기(사용하기)
변수 = 함수명(인수1, 인수2)
변수 = 함수명(인수1, 인수2)
※ 인수의 개수를 가변적으로 전달할 수 있다.
# 가변적인 수를 하나의 리스트/튜플로 받아서 수의 평균을 리턴하는 함수
def average(args):
return sum(args)/len(args)
average([1,2,3]) # 2.0
average((1,2,3,4,5)) # 2.0
# 가변적인 수를 받아서 수의 평균을 리턴하는 함수
def average(*args):
# print(args)
return sum(args)/len(args)
average(1,2,3) # 2.0
print(1,2,3,sep='@') # 1@2@3
print(4,5) # 4 5
24. 함수에서 변수 사용하기
전역변수(global variable)
- 함수 밖에서 생성
- 프로그램 어디에서든 사용할 수 있다.
say1 = 'hello'
def sayhello():
print(say1)
sayhello() # hello
지역변수(local variable)
- 함수 내에서 생성
- 함수 내에서만 사용할 수 있다.
- 지역변수와 전역변수는 동일한 이름을 사용할 수 있다.
전역변수를 함수 내에서 변경하기
: 전역변수를 함수 내에서 변경하려고 하면 global 키워드를 사용하여 선언해주어야 한다.
n1 = 1
n2 = 10
def get_plus_minus():
n1 = 2
plus = n1+n2
minus = n1-n2
return plus, minus
get_plus_minus()
n1 # 1
n1 = 1
n2 = 10
def get_plus_minus():
global n1
n1 = 2
plus = n1+n2
minus = n1-n2
return plus, minus
get_plus_minus()
n1 # 2
25. 람다표현식과 map 함수
람다표현식
- 매개변수와 수식으로 이루어진 함수
- 이름이 없는 익명함수이다
→ 수식을 실행하고 그 결과를 반환한다. 다른 함수의 인수로 넣을 때 주로 사용한다.
# 두 수를 매개변수로 받아 더한 결과를 리턴하는 함수
def get_plus(n1, n2):
return n1+n2
get_plus(1,2)
# 람다표현식으로 만들기
lambda n1,n2 : n1+n2
# 람다표현식 사용하기
(lambda n1,n2 : n1+n2)(1,2) # 3
람다표현식 호출하기
- 람다표현식 자체로 호출하기
- 람다표현식을 변수에 담아 호출하기
# 람다표현식을 프로그램 내에서 재사용하고 싶다면, 람다표현식을 변수에 담아서 사용한다.
lambda_plus = lambda n1,n2:n1+n2
# 변수로 람다표현식 담아 호출하기
lambda_plus(1,2) # 3
lambda_plus(3,5) # 8
map 함수: 리스트나 튜플의 각 요소를 지정된 함수로 처리해주는 함수
→ 원본을 변경하지 않고 새 리스트, 튜플을 생성하여 반환한다.
# map함수를 이용하여 리스트 a의 각 요소를 정수화 하여 새로운 리스트로 만들기
a = ['1', '2', '3', '4']
b = list(map(int,a))
print(a) # ['1', '2', '3', '4']
print(b) # [1, 2, 3, 4]
map 함수에 람다표현식 사용하기
※ 람다표현식 괄호로 묶어주기
# 아래 리스트 l1에 1을 더한 l2 리스트 만들기
l1 = [1,2,3,4,5]
l2 = list(map((lambda x:x+1),l1))
print(l1) # [1, 2, 3, 4, 5]
print(l2) # [2, 3, 4, 5, 6]
람다표현식에 조건부 표현식 사용하기
# 아래 리스트에서 짝수는 float로 바꾸고, 홀수는 str로 바꾸기
l1 = [1,2,3,4,5,6,7,8,9,10]
list(map((lambda x:float(x) if x%2==0 else str(x)),l1)) # ['1', 2.0, '3', 4.0, '5', 6.0, '7', 8.0, '9', 10.0]
26. 클래스와 객체
객체
객체는 독립적이다.
객체는 속성과 메소드로 구성된다.
- 객체의 속성은 객체 안의 변수에 저장된다.
객체의 이름 다음에 점을 찍고 변수 이름을 적는다. - 객체의 메소드는 객체 안에 정의된 함수다.
객체의 메소드는 객체 이름 다음에 점을 찍어 호출한다.
클래스 만들기
※ self: 메소드를 호출한 객체를 받는다. 인수에 포함되지 않는다.
※ __init__: 생성자
# 1.1 자동차클래스 만들기
class Car:
def __init__(self, b,m,c):
self.brand = b
self.model = m
self.color = c
print(self.brand, self.model, self.color, '출고')
def turn_on(self):
print(self.brand, '시동을 겁니다.')
def turn_off(self):
print(self.brand, '시동을 끕니다.')
def drive(self):
print(self.brand, '주행중입니다.')
# 1.2 객체 생성하기
# 객체명 = 클래스명(매개변수1,매개변수2,...)
car1 = Car('현대자동차','소나타','화이트')
car2 = Car('르노삼성','SM7','블랙')
# 1.3 메소드 호출하기
# 객체명.메소드명(매개변수1,매개변수2,...)
car1.turn_on() # 현대자동차 시동을 겁니다.
car1.turn_off() # 현대자동차 시동을 끕니다.
car1.drive() # 현대자동차 주행중입니다.
car2.turn_on() # 르노삼성 시동을 겁니다.
car2.turn_off() # 르노삼성 시동을 끕니다.
car2.drive() # 르노삼성 주행중입니다.
객체의 메소드 목록 조회: dir(객체)
함수, 메소드 사용법: help(함수명)
27. 모듈과 패키지
모듈
- 프로그램에서 공통적으로 사용되는 변수, 수, 클래스들을 별도로 모아서 사용한다.
- 데이터, 함수, 클래스 등을 모아서 하나의 파일로 저장해놓은 것
모듈의 세가지 종류
- 내장모듈: 파이썬에서 제공하는 기본 모듈
- 사용자정의모듈: 사용자가 만든 모듈
- 외장모듈: 다른 기업이나 단체에서 제공하는 모듈 / pip 명령어로 설치
모듈 사용하기
- import 모듈명 (as 별칭): 모듈 import
모듈명.함수명(): 모듈의 함수 사용
모듈명.변수명(): 모듈의 변수 사용
모듈명.클래스명(): 모듈의 클래스 사용
import myCalc
print(myCalc.get_plus(1,2)) # 3
print(myCalc.get_minus(1,2)) # -1
print(myCalc.get_multiply(1,2)) # 2
print(myCalc.get_division(1,2)) # 0.5
# 별칭 사용
import myCalc as calc
print(calc.get_plus(1,2))
print(calc.get_minus(1,2))
print(calc.get_multiply(1,2))
print(calc.get_division(1,2))
모듈의 일부만 가져오기
- from 모듈명 import 함수명1, 변수명1, 클래스명1: 함수명1, 변수명1, 클래스명1만 import
모듈명 붙이지 않고 함수, 변수, 클래스 바로 사용 가능
클래스명(2): error → import되지 않은 클래스명
from myCalc import get_plus, get_minus
print(get_plus(1,2)) # 3
print(get_minus(1,2)) # -1
print(myCalc.get_multiply(1,2)) # 2
모듈의 전체 가져오기
- from 모듈명 import *
모듈 내 모든 함수, 변수명1, 클래스명1() 모듈명 붙이지 않고 바로 사용 가능
from myCalc import *
print(get_plus(1,2))
print(get_minus(1,2))
print(get_multiply(1,2))
print(get_division(1,2))
패키지: 여러 모듈을 묶어놓은 것(폴더)
- 도트(.)를 사용하여 파이썬 모듈을 계층적으로 표현한다.
import | 사용 |
Import 패키지명.디렉토리명.모듈명 | 패키지명.디렉토리명.모듈명.함수명() |
from 패키지명.디렉토리명 import 모듈명 | 모듈명.함수명() |
from 패키지명.디렉토리명.모듈명 import 함수명 | 함수명() |
패키지 사용하기
- pip install 패키지명: 패키지 설치
- pip uninstall 패키지명: 패키지 제거
- pip list: 설치된 패키지 목록 확인
28. 모듈 사용하기
파이선 내장 모듈
- math: 수학적 연산과 관련된 함수들을 모아놓은 모듈
import math
- ceil : 올림하여 정수로 만들기
- floor : 내림하여 정수로 만들기
- sqrt : 제곱근
- factorial : 팩토리얼
- pi : 원주율 - random: 임의의 수를 발생시키거나 리스트의 요소 중 임의의 수를 선택하는데 사용되는 모듈
import random
- 랜덤 정수 구하기
- random.randint(시작값, 끝값) : 시작값~끝값 사이의 랜덤 정수 구하기 (끝값 포함)
- random.randrange(시작값, 끝값) : 시작값~끝값 사이의 랜덤 정수 구하기 (끝값 미포함)
- random.randrange(끝값) : 0~끝값 사이의 랜덤 정수 구하기 (끝값 미포함) - 랜덤 실수 구하기
- random.random() : 0~1 사이의 랜덤 실수 구하기
- random.uniform(시작값,끝값) : 시작값 ~ 끝값 사이의 랜덤 실수 반환(끝값 미포함) - 시퀀스 데이터에서 무작위 요소 추출
- random.choice(시퀀스) - 시퀀스 데이터에서 무작위로 n개 요소 추출
- random.sample(시퀀스, n) - 시퀀스 데이터를 무작위로 랜덤하기 섞기
random_shuffle(시퀀스): 원본을 섞는다. 리턴값이 없다.
- 랜덤 정수 구하기
# 1~10 사이의 랜덤 정수 구하기(10포함)
print(random.randint(1,10))
# 1~9 사이의 랜덤 정수 구하기
print(random.randrange(1,10))
# 0~9 사이의 랜덤 정수 구하기
print(random.randrange(10))
# 0~1 사이의 랜덤 실수 구하기
print(random.random())
# 1~10 사이의 랜덤 실수 구하기
print(random.uniform(1,10))
# 시퀀스 데이터에서 무작위 요소 추출
print(random.choice([1,2,3]))
print(random.choice('python'))
print(random.choice(range(1,101)))
# 시퀀스 데이터에서 무작위로 n개 요소 추출
print(random.sample([1,2,3],2)) # [1, 2]
print(random.sample('python',2)) # ['y', 'n']
print(random.sample(range(1,101),2)) # [89, 7]
# 시퀀스 데이터를 무작위로 랜덤하게 섞기
a = [1,2,3,4,5]
random.shuffle(a)
a # [2, 5, 1, 4, 3]
- datetime: 날짜, 시간과 관련된 모듈
import datetime
- datetime.datetime.now(): 현재 날짜와 시각 가져오기
- datetime.datetime.now().strftime(포멧): 시간을 포멧에 맞게 출력하기
- datetime.datetime.now()+datetime.timedelta(더할시간) : 특정 일, 시간, 분, 초 이후의 날짜와 시간 구하기
timedelta에는 year로 계산하는 기능은 없음
# 현재 날짜와 시각 출력
print(now.year,'년')
print(now.month,'월')
print(now.day,'일')
print(now.hour,'시')
print(now.minute,'분')
print(now.second,'초')
# 시간을 포멧에 맞게 출력
now.strftime('%Y.%m.%d %H:%M:%S') # '2021.09.24 14:16:46'
# 특정 시간 이후의 날짜와 시간 구하기
# 현재로부터 100일 이후의 날짜와 시간 구하기
now + datetime.timedelta(days=100)
# 현재로부터 100일 전의 날짜와 시간 구하기
now + datetime.timedelta(days=-100)
- time: 시간 데이터를 다루기 위한 모듈
import time
- 현재 날짜와 시간 가져오기
- time.localtime()
- time.ctime() - time.sleep(초): 일시정지
- 현재 날짜와 시간 가져오기
tm = time.localtime()
tm # time.struct_time(tm_year=2023, tm_mon=3, tm_mday=8, tm_hour=0, tm_min=40, tm_sec=40, tm_wday=2, tm_yday=67, tm_isdst=0)
time.ctime() # 'Wed Mar 8 00:40:42 2023'
# 일시정지
# 카운트다운
print(3)
time.sleep(1)
print(2)
time.sleep(1)
print(1)
time.sleep(1)
print('srart')
모듈 내 함수 확인: dir(모듈명)
ex) 파이썬 내장함수 확인: dir(__builtins__)
모듈 내 함수 사용법 확인
import 모듈명
help(모듈명.함수명)
외부모듈
- 외부모듈 설치하기: pip install 모듈명
- 설치된 외부모듈 확인하기: pip list
29. 판다스 데이터의 구조
pandas: 파이썬에서 데이터를 조작/분석하기 위한 라이브러리
- 행/열로 이루어진 테이블 형태의 데이터를 다룬다.
- 엑셀로 다루지 못하는 대용량 데이터를 다룰 수 있다.
- Matplotlib, Seaborn 등 다양한 시각화 도구와 함께 사용할 수 있다.
판다스에서 다루는 데이터 형태
판다스에서는 Series(1차원 리스트 형태)와 DataFrame(2차원 표 형태)의 형태로 데이터를 다룬다.
데이터프레임(DataFrame): 행, 열로 이루어진 2차원 표 형태
- 행(row): index로 구분
- 열(series, column): column_name으로 구분
데이터프레임 생성 (row단위: list)
df = pd.DataFrame(
[['james',30,'programmer'],
['amy',20,'student'],
['david',25,'designer']],
columns=['name','age','job'],
index=['a','b','c'])
df
- 표의 데이터를 2차원 리스트로 표현하기
- 데이터프레임으로 만들기
- 인덱스 추가하기
- 컬럼명 추가하기
데이터프레임 생성 (column단위: dic)
df = pd.DataFrame(
{'name':['james','amy','david'],
'age':[30,20,25],
'job':['programmer','student','designer']},
index=['a','b','c'])
df
데이터프레임 생성 (파일)
1. 데이터파일 준비하기: UTF-8 형식의 csv 파일
다른이름으로 저장 → 인코딩: utf-8 선택하여 저장
2. 데이터파일 읽어와 데이터프레임 만들기
pd.read_csv(파일경로)
30. 데이터 확인하기
데이터 미리보기
- df.head(n): 가장 앞의 n행 보기
- df.tail(n): 가장 뒤의 n행 보기
- df.sample(n): 랜덤으로 n개 데이터 보기
= n을 생략하면 1개의 샘플 출력 - df.sample(frac=0.2): 랜덤 샘플 비율로 보기
= 지정한 비율의 샘플 출력 - df.nlargest(갯수, 컬럼명): 높은순 보기
※ 컬럼의 데이터가 숫자형일 때 사용할 수 있다. - df.nsmallest(갯수, 컬럼명): 낮은순 보기
# eng 낮은 순으로 5개 보기
df.nsmallest(5,'eng')
데이터 요약보기
- df.shape: (행,열)의 크기 보기
- len(df): 데이터의 갯수 보기
- df.columns: 컬럼명 보기
- df.index: 인덱스 보기
- df.dtypes: 데이터의 자료형 보기
※ 판다스에서는 문자열의 데이터타입이 object이다. - df.info(): 데이터프레임 정보 보기
= 데이터프레임의 총 샘플 갯수, 컬럼 수, 컬럼 별 정보 등을 확인한다. - df['col'].unique(): 컬럼의 유니크한 데이터 뽑기
- df['col'].value_counts(): 컬럼의 유니크한 값의 갯수 보기
- df.describe(): 요약통계 보기, 숫자를 다루는 컬럼들만 볼 수 있음
31. 시리즈 다루기
시리즈 만들기
pd.Series(리스트)
시리즈: 엑셀시트의 열 1개를 의미 (1차원 리스트형태)
시리즈의 index와 value 가져오기
- 시리즈.index: 시리즈의 인덱스는 데이터의 이름이고, 행번호는 따로 있다.
- 시리즈.values
시리즈의 index 지정하기
- 시리즈.index = 인덱스 리스트
- 숫자, 문자열 모두 가능
시리즈의 통계값 사용하기
:mean, min, max, median, std / describe
- 시리즈의 통계값은 시리즈의 value가 모두 숫자형일 때 사용할 수 있다.
시리즈 주요 메서드
- 값 정렬 : 시리즈.sort_values( )
- 인덱스 정렬 : 시리즈.sort_index( )
- 인덱스 리셋 : 시리즈.reset_index( ) → 행번호로 인덱스 재지정
- 특정 값을 가진 시리즈 값을 교체 : replace(찾을값, 교체할값)
- 시리즈를 데이터프레임으로 변환 : 시리즈.to_frame( )
# 시리즈 인덱스 새로 만들기
s.reset_index()
32. 컬럼명으로 데이터 추출하기
시리즈 형태로 하나의 열 데이터 추출하기
- 데이터프레임명['컬럼명']
: 컬럼명은 1개만 지정할 수 있으며 대괄호 1개를 사용한다. - 데이터프레임명.컬럼명
: 컬럼명에 공백이나 특수문자가 섞여있을 때는 사용할 수 없다.
데이터프레임 형태로 여러 열 단위 데이터
➡️ 대괄호 안에 컬럼리스트가 들어간다. (대괄호 2개로 표현)
# 'name','kor' 컬럼 데이터 추출하기
df[['name','kor']] .head(3)
# 'math' 컬럼을 데이터프레임 형태로 추출하기
df_math = df[['math']]
조건에 따라 데이터 추출하기
- 조건에 따른 각 데이터의 결과를 True/False로 표현하는 불린인덱스형태로 추출된다.
- 불린인덱스를 데이터프레임명[]으로 감싸면 True인 데이터만 추출된다.
# 한 과목이라도 100을 받은 학생 추출
df[(df.kor==100)|(df.eng==100)|(df.math==100)]
# kor의 값이 60~90인 학생의 name, kor 추출
df[(df['kor']>=60)&(df['kor']<=90)][['name','kor']]
특정 값을 가진 데이터만 추출
- 결과는 True/False만으로 이루어진 불린인덱싱형태로 추출된다.
- 데이터프레임[]으로 감싸면 True인 데이터만 추출된다.
# 이름이 Amy인 데이터 추출
df[df['name'].isin(['Amy'])]
# kor이 50,100 데이터 추출
df[df['kor'].isin([50,100])]
null 여부에 따른 데이터 추출
- 컬럼.isnull() → 해당 컬럼의 값이 null인 데이터 추출
- 컬럼.notnull() → 해당 컬럼의 값이 null이 아닌 데이터 추출
- 결과는 True/False만으로 이루어진 불린인덱싱형태로 추출된다.
- 데이터프레임[]으로 감싸면 True인 데이터만 추출된다.
# kor이 null인 데이터 추출
df[df.kor.isnull()]
# kor이 null이 아닌 데이터 추출
df[df.kor.notnull()]
마무리하며
어제 오류났던 주피터 노트북 확장 프로그램 NBextension에 대해 질문했다.
다른 코드를 보내준다고 하셔서 내일 다시 수정해봐야겠다.
오늘도 아주 많은 양을 학습했다.
파이썬을 수박겉핥기 식으로만 알고 있었는데 영상을 하나하나 볼때마다
아 그래서 그때 그걸 썼구나~하면서 뿌듯해했다🤗
내일의 TIL에는 원하는 내용을 빨리 찾기 위해 목차 기능도 추가해야겠다.
그리고 코딩테스트로 파이썬을 풀어보면 배운 내용이 더 잘 기억에 남을 것 같아서
하루 일과를 마치고 시간이 남는 날에는 2-3문제씩 풀어봐야겠다.
오늘은 여기까지!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/025.gif)
* 유데미 큐레이션 바로가기 : https://bit.ly/3HRWeVL
* STARTERS 취업 부트캠프 공식 블로그 : https://blog.naver.com/udemy-wjtb
본 후기는 유데미-웅진씽크빅 취업 부트캠프 4기 데이터분석/시각화 학습 일지 리뷰로 작성되었습니다.
'교육 > 유데미 스타터스 4기' 카테고리의 다른 글
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 1주차 학습 일지 (0) | 2023.02.10 |
---|---|
[👩💻TIL 5일차 ] 유데미 스타터스 취업 부트캠프 4기 (0) | 2023.02.10 |
[👩💻TIL 4일차 ] 유데미 스타터스 취업 부트캠프 4기 (0) | 2023.02.09 |
[👩💻TIL 3일차 ] 유데미 스타터스 취업 부트캠프 4기 (0) | 2023.02.08 |
[👩💻TIL 1일차 ] 유데미 스타터스 취업 부트캠프 4기 (0) | 2023.02.06 |