관리 메뉴

ilovechoonsik

[STARTERS 4기 TIL] 파이썬 기초 + 판다스, 시리즈 (230207) 본문

STARTERS 4기 🚉/TIL 👶🏻

[STARTERS 4기 TIL] 파이썬 기초 + 판다스, 시리즈 (230207)

춘시기좋아 2023. 2. 7. 14:19

 

 

📖 오늘 내가 배운 것

 

1. 딕셔너리

2. 함수

3. 람다표현식과 map 함수

4. 클래스와 객체

5. 모듈과 패키지

6. 판다스

7. 시리즈

 

1. 딕셔너리

1.1 딕셔너리?

- 키:값 쌍을 이루어 하나의 항목으로 저장되는 자료형

- 키와 값은 콜론(:)으로 구분

- 중괄호{} 안에 , 로 구분하여 항목을 저장

 

1.2 딕셔너리 만들기

- 중괄호 안에 키

  • 중괄호 안에 키:값의 쌍으로 된 항목을 콤마(,)로 구분하여 적어준다.
  • menu = {'김밥':2000, '떡볶이':2500, '어묵':2000, '튀김':3000}

- dict()로 딕셔너리 만들기

 

(1) 딕셔너리명 = dict(키1=값1, 키2=값2,...,)

  • 키에 따옴표('')를 쓰지 않는다는 점에 주의한다.
  • 키에 따옴표('')를 쓰지 않아도 딕셔너리가 생성되면서 자동으로 문자열형으로 지정된다.
  • menu1 = dict(김밥=2000, 떡볶이=2500, 어묵=2000, 튀김=3000)

(2) 딕셔너리명 = dict(zip(key리스트, value리스트)) # zip = 동일한 개수로 이루어진 데이터 묶어서 리

  • menu2 = dict(zip(['김밥','떡볶이','어묵','튀김'],[2000,2500,2000,3000]))

(3) 딕셔너리명 = dict([(키1,값1),(키1,값2),...,])

  • menu3 = dict([('김밥',2000),('떡볶이',2500),('어묵',2000),('튀김',3000)])

(4) 딕셔너리명 = dict({키1:값1,키2:값2,...,})

  • menu4 = dict({'김밥':2000, '떡볶이':2500, '어묵':2000, '튀김':3000})

결과

{'김밥': 2000, '떡볶이': 2500, '어묵': 2000, '튀김': 3000}

 

1.3 딕셔너리에 사용할 수 있는 자료형과 키 값 특징

  • 딕셔너리의 value에는 모든 자료형을 혼합하여 사용할 수 있다.
  • 딕셔너리의 key에는 숫자, 문자열, 부울형, 튜플을 사용할 수 있다.

# 딕셔너리 키는 자료를 구분하는데 사용되기 때문에 변경 못하고 중복을 배제

# 값에는 전부 가능

 

1.4 딕셔너리 값에 접근

 

#딕셔너리명.get(key, msg)
#존재하지 않는 key로 추출 시도해도 오류가 발생하지 않는다.
#존재하지 않는 key로 추출 시도할 경우 출력할 메시지를 설정할 수 있다.

person.get('몸무게','존재하지않음')
###'존재하지않음'

 

 

1.5 딕셔너리의 항목 추가/수정하기

scores = {'kor':100, 'eng':90, 'math':80}

# math점수 85점으로 수정하기
scores['math']=85

# music점수 95점 추가하기
scores[' music']=95

### {'kor': 100, 'eng': 90, 'math': 85, ' music': 95}

 

- setdefault

: 키가 존재하면 수정, 존재하지 않으면 추가

# setdefault로 항목 추가하기
# 딕셔너리명.setdefault(키,값)
# 이미 들어있는 키의 값은 수정할 수 없다.
scores = {'kor':100, 'eng':90, 'math':80}

# music점수 넣기(key만 넣고 value를 생략하면? value에 빈값)
scores.setdefault('music')
### {'kor': 100, 'eng': 90, 'math': 80, 'music': None}

scores = {'kor':100, 'eng':90, 'math':80}
# music점수 90점 추가
scores.setdefault('music',90)
###{'kor': 100, 'eng': 90, 'math': 80, 'music': 90}

scores = {'kor': 100, 'eng': 90, 'math': 80, 'music': 95}
# music점수 85점으로 수정
scores.setdefault('music',85)
###{'kor': 100, 'eng': 90, 'math': 80, 'music': 95}

 

- update로 여러 항목 추가/수정하기

  • 키가 존재하면 수정, 존재하지 않으면 추가된다
  • 딕셔너리명.update(키1=값1, 키1=값2,...)
  • 키에 따옴표를 하지 않지만, 딕셔너리에 들어갈 때는 따옴표가 붙어서 들어간다.
scores = {'kor':100, 'eng':90, 'math':80}

# math:90, music:90
scores.update(math=90, music=90)

###{'kor': 100, 'eng': 90, 'math': 90, 'music': 90}

 

  • 딕셔너리명.update(zip(key리스트, value리스트)
scores = {'kor':100, 'eng':90, 'math':80}

# math:90, music:90
scores.update(zip(['math','music'],[90,90]))

###{'kor': 100, 'eng': 90, 'math': 90, 'music': 90}

 

  • 딕셔너리명.update([(키1,값1),(키2,값2),...])
scores = {'kor':100, 'eng':90, 'math':80}

# math:90, music:90
scores.update([('math',90),('music',90)])

###{'kor': 100, 'eng': 90, 'math': 90, 'music': 90}

 

  • 딕셔너리명.update({키1:값1,키2:값2,...,})
scores = {'kor':100, 'eng':90, 'math':80}

# math:90, music:90
scores.update({'math': 90, 'music': 90})

### {'kor': 100, 'eng': 90, 'math': 90, 'music': 90}

 

1.6 딕셔너리의 항목 삭제하기

- del 딕셔너리명[키]

  • 해당 키의 항목 삭제

- 딕셔너리명.pop(키, 기본값)

  • 해당 키의 항목(값) 반환하고 삭제

- 딕셔너리명.clear()

  • 딕셔너리의 모든 항목 삭제

 

1.7 딕셔너리 키, 값 다루기

(1) 딕셔너리 키,값을 리스트 형태로 가져오기

- 딕셔너리명.keys()

  • 딕셔너리의 키만 리스트로 가져오기
  • dict_keys객체로 받아온다. 리스트처럼 사용할 수 있지만 리스트는 아니다.

- 딕셔너리명.values()

  • 딕셔너리의 value만 리스트로 가져오기
  • dict_values객체로 받아온다.

- 딕셔너리명.items()

  • 딕셔너리의 (key,value) 쌍을 리스트로 가져오기
  • dict_items객체로 받아온다.

 

(2) for문으로 딕셔너리 출력하기

- for문으로 딕셔너리의 key만 출력하기

scores = {'kor':100, 'eng':90, 'math':80}

# scores.keys는 dict.keys라는 객체이지만 시퀀스 형태이기 때문에 list처럼 사용할 수 있다!
for i in scores.keys():
    print(i)
    
# 딕셔너리로 for문 돌리기
for i in scores:
    print(i)
'''
kor
eng
math
'''

 

- for문으로 딕셔너리의 value만 출력하기

scores = {'kor':100, 'eng':90, 'math':80}
for i in scores.values():
    print(i)

 

- for문으로 딕셔너리의 key, value만 출력하기

scores = {'kor':100, 'eng':90, 'math':80}
for i in scores.items():
    print(i)
'''
('kor', 100)
('eng', 90)
('math', 80)
''' 

for k,v in scores.items():
    print(k,v)
'''
kor 100
eng 90
math 80
'''

 

(3) 딕셔너리 정렬하기

 

- sorted(dict.keys())

- sorted(dict.values())

- sorted(dict.items())

 

# .sort()는 지원하지 않음
- scores.keys().sort()

 

1.8 연습

- 영어단어장 만들기
엔터를 입력할 때까지 영어단어,뜻을 입력받아 단어장을 만들고, 입력이 끝나면 단어 테스트를 실시하는 프로그램을 만들어봅시다.
1) 단어장을 만듭니다.
2) 단어테스트를 실시하고 맞은 갯수를 계산합니다.
3) 테스트가 끝나면 맞은갯수/전체단어수/점수 형태로 결과를 출력합니다

1.1  단어장 만들기
엔터('')를 입력할 때까지 영어단어,뜻을 입력받아 딕셔너리에 저장

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

'''
영어단어,뜻:apple,사과
영어단어,뜻:banana,바나나
영어단어,뜻:grapes,포도
영어단어,뜻:
{'apple': '사과', 'banana': '바나나', 'grapes': '포도'}
'''

 

1.2  단어테스트

단어장의 단어들을 모두 테스트
맞은 갯수는 별도로 카운트

cnt = 0 
for eng, kor in dict_word.items():
    answer = input(eng)
    if answer==kor:
        print('O')
        cnt+=1
    else:
        print('X')
        
'''
apple사과
O
banana수박
X
grapes포도
O
'''

 

 

1.3  테스트 결과 출력

맞은갯수/전체문제수/점수 출력

print('맞은갯수:',cnt)
print('전체문제수:',len(dict_word))
print('점수:',round(cnt/len(dict_word)*100,1))


'''
맞은갯수: 2
전체문제수: 3
점수: 66.7
'''

 

 

2. 함수

2.1 함수란?

: 특정 기능을 구현하기 위한 코드의 묶음

 

2.2 함수 사용 목적

- 크고 복잡한 프로그램을 해결하기 쉬운 작은 단위로 쪼개어 해결한다.

- 반복되는 코드를 함수화하여 코드의 중복을 배제한다.

 

2.3 함수 사용의 효과

- 크고 복잡한 문제를 쉽게 해결할 수 있다.

- 코드의 가독성을 높여 프로그램의 흐름 파악이 용이하다.

- 자주 사용되는 코드를 하나의 함수로 만들어 프로그램 내에서 재사용할 수 있다.

- 프로그램의 디버깅이 용이하다.

 

2.4 함수의 종류

 

2.5 함수 정의 및 호출

# 함수 정의
def introduce():
    print('안녕하세요!')
    print('저의 이름은 파이썬입니다.')

# 함수 호출
introduce()

# 함수 정의를 먼저 한 후 호출하도록 코드를 순차적으로 작성해야 한다.

# 코드는 위에서부터 아래로 순차적으로 실행된다.
# 함수를 호출하는 시점에 함수가 정의되어 있지 않으면 에러 발생

 

2.6 매개변수 전달하기

- 함수에서 값을 받는 부분 : 매개변수, 파라미터

def 함수명 (매개변수1, 매개변수2, ...):

 

- 함수 호출할 때 값을 전달하는 부분 : 인수, argument

함수명(인수1, 인수2,...)

def introduce(name, age):
    print('안녕하세요!')
    print('저의 이름은, '+name+'입니다.')
    print('나이는, '+str(age)+'살입니다.')
    
introduce('파이썬',20)
introduce('홍길동',21)

'''
안녕하세요!
저의 이름은, 파이썬입니다.
나이는, 20살입니다.
안녕하세요!
저의 이름은, 홍길동입니다.
나이는, 21살입니다.
'''

 

연습

 

  • 이름과 나이를 입력받아 생일축하 메시지를 출력하는 함수를 만들고 호출하세요.
  • 생일문구 : ooo님의 oo번째 생일을 축하합니다!!
name = input('이름:')
age = input('나이:')

def happybirthday(name, age):
    print(f'{name}님의 {age}번째 생일을 축하합니다.')
    
happybirthday(name,age)    

'''
이름:파이썬
나이:20
파이썬님의 20번째 생일을 축하합니다.
'''

 

2.7 값 반환

  • 여러개의 값 하나의 튜플로 묶어서 반환한다.
# 두 수를 매개변수로 받아 더한값과 뺀 값을 리턴하는 함수 만들기
def get_plus_minus(n1,n2):
    return n1+n2, n1-n2

result = get_plus_minus(1,2)
result

plus,minus = get_plus_minus(1,2)
print(plus,minus)

###3 -1

 

 

2.8 함수에서 빠져나오기

  • 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): #2부터 자신까지 for문 돌려서 나누기
        if n % i == 0:
            return '소수 아님'
            
    return '소수임'

is_prime()

 

2.9 인수

- 인수

함수(인수, 인수, ...)

기본적인 인수 전달방법! 함수에 정의된 매개변수와 순서에 맞게 짝을 맞추어 인수를 전달한다.

 

- 디폴트 인수

def greet(name, msg='오랜만이야'):
    print('안녕',name,msg)
greet('친구')
greet('친구', '반가워')
안녕 친구 오랜만이야
안녕 친구 반가워

함수를 정의할 때 매개변수에 디폴트값을 지정하면 디폴트값이 지정된 인수를 생략할 수 있다.

디폴트 인수는 기본 위치 인수를 다 적은 다음에 적어야 한다.

 

- 키워드 인수

def get_minus(x,y,z):
    return x-y-z

print(get_minus(5,10,15))
print(get_minus(5,z=15,y=10))
-20
-20

함수를 호출할 때 인수의 이름을 명시하면, 순서를 바꾸어 전달할 수 있다.

 

- 가변인수

인수를 하나의 튜플이나 리스트로 전달한다.

# 가변적인 수를 하나의 리스트/튜플로 받아서 수의 평균을 리턴하는 함수  

def average(args):
    return sum(args)/len(args)

average([1,2,3])
average((1,2,3,4,5))
3.0

 

매개변수에 '*'를 붙이면 여러개의 인수를 하나의 튜플로 받는다. (인수의 갯수가 가변적)

# 가변적인 수를 받아서 수의 평균을 리턴하는 함수

def average(*args):
    # print(args)
    return sum(args)/len(args)

average(1,2,3)
# 2.0

 

2.10 함수에서 변수 사용

- 전역변수

  • 함수 밖에서 생성된 변수
  • 함수 내에서도 사용할 수 있다.

- 지역변수

  • 함수 내에서 생성된 변수
  • 함수 내에서만 사용할 수 있다.

- 함수 안에서 전역변수 값 변경하기

  • 함수 내에서 전역변수 값을 변경하려면 'global' 키워드를 함께 사용하여야 한다.
  • 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

 

3. 람다 표현식과 map 함수

3.1 람다 표현식

- 매개변수와 수식으로 이루어진 함수!

lambda 매개변수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)
lambda_plus(3,5)
8

 

3.2 map 함수

- map은 리스트나 튜플의 각 요소를 지정된 함수로 처리해주는 함수이다.

  • 원본리스트를 변경하지 않고 새 리스트를 생성한다.
  • list(map(함수, 리스트))
  • tuple(map(함수, 튜플))
# map함수를 이용하여 리스트 a의 각 요소를 정수화 하여 새로운 리스트로 만들기
a = ['1', '2', '3', '4']
b = list(map(int,a))

print(a)
print(b)

# ['1', '2', '3', '4']
# [1, 2, 3, 4]

 

- map 함수에 람다표현식 사용하기

# 아래 리스트 l1에 1을 더한 l2 리스트 만들기
l1 = [1,2,3,4,5]
l2 = list(map((lambda x:x+1),l1))
print(l1)
print(l2)
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]

 

 

- 람다 표현식에 조건부 표현식 사용

  • lambda 매개변수들 : 식1 if 조건식 else 식2
# 아래 리스트에서 짝수는 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))
# 들어온 매개변수 x가 짝수라면 -> float(x)
# else -> str(x)
['1', 2.0, '3', 4.0, '5', 6.0, '7', 8.0, '9', 10.0]

 

 

4. 클래스와 객체

 

1 . 자동차 클래스와 객체

  • 3가지 속성과 3가지 기능이 있는 자동차 객체를 찍어내기 위한 틀을 만든다.
  • 속성 : brand, model, color
  • 기능 : turn_on, turn_off, drive

1.1  자동차클래스 만들기 (자동차라는 개별적인 각 객체 만들기 위한 )

class Car:
    def __init__(self, b,m,c): # self는 객체 받는 매개변수! 인수에 포함 x
        # 객체 속성 초기화, 이 객체의 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','블랙')
현대자동차 소나타 화이트 출고
르노삼성 SM7 블랙 출고

 

1.3  메소드 호출하기

  • 객체명.메소드명(매개변수1,매개변수2,...)
# car1라는 객체의 동작
car1.turn_on()
car1.turn_off()
car1.drive()

# car2라는 객체의 동작
car2.turn_on()
car2.turn_off()
car2.drive()

 

- 객체 메소드 목록 조회

  • dir(객체)

- 함수, 메소드 사용법

  • help(함수명)

 

 

5. 모듈과 패키지

5.1 모듈 사용하기

  • import 모듈명
  • 모듈명.함수명( )
import myCalc
print(myCalc.get_plus(1,2))
print(myCalc.get_minus(1,2))
print(myCalc.get_multiply(1,2))
print(myCalc.get_division(1,2))

'''
3
-1
2
0.5
'''

 

5.2 모듈 별칭 사용하기

  • import 모듈명 as 별칭
  • 별칭.함수명()
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))

'''
3
-1
2
0.5
'''

 

 

 

 

 

5.3 모듈 이름 붙이지 않고 함수 사용하기

  • from 모듈명 import 함수명1, 함수명2,...
from myCalc import get_plus, get_minus
print(get_plus(1,2))
print(get_minus(1,2))
print(myCalc.get_multiply(1,2))

'''
3
-1
2
'''


from myCalc import *
print(get_plus(1,2))
print(get_minus(1,2))
print(get_multiply(1,2))
print(get_division(1,2))

'''
3
-1
2
0.5
'''

 

 

5.4 파이썬 내장 모듈

- math

  • 수학적 연산과 관련된 함수들을 모아놓은 모듈
  • ceil : 올림하여 정수로 만들기
  • floor : 내림하여 정수로 만들기
  • sqrt : 제곱근
  • factorial : 팩토리얼
  • pi : 원주율
import math
print(math.ceil(1.4))
print(math.floor(1.7))
print(math.sqrt(4))
print(math.factorial(3))
print(math.pi)

'''
2
1
2.0
6
3.141592653589793
'''

 

 

- random

  • 임의의 수를 발생시키거나 리스트의 요소 중 임의의 수를 선택하는 데 사용되는 모듈

랜덤 정수 구하기

  • random.randint(시작값, 끝값) : 시작값~끝값 사이의 랜덤 정수 구하기 (끝값 포함)
  • random.randrange(시작값, 끝값) : 시작값~끝값 사이의 랜덤 정수 구하기 (끝값 미포함)
  • random.randrange(끝값) : 0~끝값 사이의 랜덤 정수 구하기 (끝값 미포함)
# 1~10 사이의 랜덤 정수 구하기(10포함)
print(random.randint(1,10))

# 1~9 사이의 랜덤 정수 구하기
print(random.randrange(1,10))
    
# 0~9 사이의 랜덤 정수 구하기
print(random.randrange(10))

'''
6
7
1
'''

 

랜덤 실수 구하기

  • random.random() : 0~1 사이의 랜덤 실수 구하기
  • random.uniform(시작값,끝값) : 시작값 ~ 끝값 사이의 랜덤 실수 반환(끝값 미포함)
# 0~1 사이의 랜덤 실수 구하기
print(random.random())

# 1~10 사이의 랜덤 실수 구하기
print(random.uniform(1,10))

'''
0.9558941639754068
2.5328923420483207
'''

 

시퀀스 데이터에서 무작위 요소 추출

  • random.choice(시퀀스)

시퀀스 데이터에서 무작위로 n개 요소 추출

  • random.sample(시퀀스,n)

시퀀스 데이터를 무작위로 랜덤하게 섞기

  • random.shuffle(시퀀스) : 원본을 섞는다. 리턴값이 없다.
print(random.choice([1,2,3]))
print(random.choice('python'))
print(random.choice(range(1,101)))
'''
3
n
46
'''

print(random.sample([1,2,3],2))
print(random.sample('python',2))
print(random.sample(range(1,101),2))
'''
[1, 2]
['y', 'n']
[89, 7]
'''

a = [1,2,3,4,5]
random.shuffle(a)
a
# [2, 5, 1, 4, 3]

 

 

- datetime

  • 날짜, 시간과 관련된 모듈.
  • 날짜 형식을 만들 때 주로 사용된다.

 

현재 날짜와 시각 가져오기

  • datetime.datetime.now()

 

현재 날짜와 시각 출력하기

print(now.year,'년')
print(now.month,'월')
print(now.day,'일')
print(now.hour,'시')
print(now.minute,'분')
print(now.second,'초')
 
2021 년
9 월
24 일
14 시
16 분
46 초

 

 

시간을 포멧에 맞게 출력하기

  • datetime.datetime.now().strftime(포멧)
now.strftime('%Y.%m.%d %H:%M:%S')
#'2021.09.24 14:16:46'

 

특정 시간 이후의 날짜와 시간 구하기

  • datetime.datetime.now()+datetime.timedelta(더할시간) : 특정 일, 시간, 분, 초 이후의 날짜와 시간 구하기
  • timedelta에는 year로 계산하는 기능은 없음
now + datetime.timedelta(weeks=1, days=1, hours=1, minutes=1, seconds=1)
# datetime.datetime(2021, 10, 2, 15, 17, 47, 299163)


# 현재로부터 100일 이후의 날짜와 시간 구하기
now + datetime.timedelta(days=100)
# datetime.datetime(2022, 1, 2, 14, 16, 46, 299163)

# 현재로부터 100일 전의 날짜와 시간 구하기
now + datetime.timedelta(days=-100)
# datetime.datetime(2021, 6, 16, 14, 16, 46, 299163)

 

- time

  • 시간 데이터를 다루기 위한 모듈

 

현재 날짜와 시간 가져오기

  • time.localtime()
  • time.ctime()
time.localtime().tm_year
time.localtime().tm_mon
time.localtime().tm_mday
time.localtime().tm_hour
time.localtime().tm_min
# 25

time.ctime()
#'Fri Sep 24 14:25:33 2021'

 

일시정지

  • time.sleep(초)

 

모듈 살펴보기

- 모듈 내 함수 확인

  • dir(모듈명)

- 모듈 내 함수 사용법 확인

  • import 모듈명
    help(모듈명.함수명)

- 외부 모듈

  • 외부모듈 설치하기 : pip install 모듈명
  • 설치된 외부모듈 확인하기 : pip list

 

 

6. 판다스

 

6.1  데이터프레임 만들기

  • 데이터프레임 : 엑셀의 시트(sheet)와 동일한 개념이다. (2차원 표 형태)

인덱스 : list에서는 항목의 순서 나타내는 값, df,series에서 인덱스는 데이터에 이름을 붙이는 것

 

- 리스트로 만들기

pd.DataFrame(2차원리스트, columns=컬럼리스트, index=인덱스리스트)

  • 행 단위로 데이터프레임이 생성된다.
  • 컬럼, 인덱스를 지정하지 않으면 디폴트로 0부터 시작하는 숫자가 지정된다.
df = pd.DataFrame(
    [['james',30,'programmer'],
    ['amy',20,'student'],
    ['david',25,'designer']],
    columns=['name','age','job'],
    index=['a','b','c']
)

df

'''
	name	age	job
a	james	30	programmer
b	amy	20	student
c	david	25	designer
'''

 

 

- 딕셔너리로 만들기

pd.DataFrame(딕셔너리, index=인덱스리스트)

  • 딕셔너리는 {컬럼명1:컬럼값리스트, 컬럼명2:컬럼값리스트...}
  • 컬럼 단위로 데이터프레임이 생성된다.
  • 딕셔너리의 키가 컬럼명이 된다.
  • 인덱스를 지정하지 않으면 디폴트로 0부터 시작하는 숫자가 지정된다.
{'name':['james','amy','david'],
 'age':[30,20,25],
 'job':['programmer','student','designer']
}

df = pd.DataFrame(
    {'name':['james','amy','david'],
     'age':[30,20,25],
     'job':['programmer','student','designer']
    },
    index=['a','b','c']
)

df

'''
	name	age	job
a	james	30	programmer
b	amy	20	student
c	david	25	designer
'''

 

 

- csv 파일에서 데이터를 읽어와 만들기

pd.read_csv(파일경로)

  • csv파일은 utf-8 형식이어야 한다.

 

6.2 데이터 일부 미리보기

- head(n) : 가장 위 n개 행

- tail(n) : 가장 뒤 n개 행

- sample(n) : 랜덤 n개 행 (비율로 보려면 frac=비율(0.n))

- nlargest(갯수,컬럼명) : 높은 순 보기 (컬럼의 데이터가 숫자형일 때 사용할 수 있다.)

- nsmallest(갯수,컬럼명) : 낮은 순 보기 (컬럼의 데이터가 숫자형일 때 사용할 수 있다.)

 

6.3 데이터 요약보기

- shape : 행,열 크기 보기

- len(데이터프레임) : 데이터 갯수 보기

- columns : 컬럼명 보기

- index : 인덱스 보기

- dtypes : 데이터 자료형 보기 (판다스에서는 문자열의 데이터타입이 object)

- info() : 데이터프레임 정보 보기 (데이터프레임의 총 샘플 갯수, 컬럼 수, 컬럼 별 정보 등)

- 컬럼.unique() : 컬럼의 유니크한 데이터 뽑기 (개수는 nuique)

- 컬럼.value_counts() : 컬럼의 유니크한 값의 갯수

- describe() : 요약통계 보기

 

7. 시리즈

7.1  시리즈 만들기

시리즈 : 엑셀시트의 열 1개를 의미한다.(1차원 리스트형태)

만들기 : pd.Series(리스트)

# 시리즈 만들기
s = pd.Series(['amy',170,240])
s.index
s

# 문자열 숫자 섞여 있으면 -> dtype은 object로 찍힌다

'''
0    amy
1    170
2    240
dtype: object
'''

 

7.2  시리즈의 index와 value 가져오기

  • 시리즈에는 index와 value가 있다.
  • 시리즈의 index 가져오기 : 시리즈.index
  • 시리즈의 value 가져오기 : 시리즈.values
  • 시리즈의 인덱스는 리스트의 인덱스와 다른 개념이다.
    시리즌의 인덱스는 데이터의 이름이고, 행번호는 따로 있다.

 

7.3  시리즈의 index 지정하기

시리즈.index = 인덱스리스트

  • 시리즈의 인덱는 숫자, 문자열 모두 가능하다.

 

7.4  시리즈의 통계값 사용하기

  • 평균 : 시리즈.mean()
  • 최소값 : 시리즈.min()
  • 최대값 : 시리즈.max()
  • 중간값 : 시리즈.median()
  • 표준편차 : 시리즈.std()
  • 요약통계 : 시리즈.describe()

>>> 시리즈의 통계값은 시리즈의 value가 모두 숫자형일 때 사용할 수 있다.

 

s2 = pd.Series([10,20,30,40,50])

print('평균:',s2.mean())
print('최소값:',s2.min())
print('최대값:',s2.max())
print('중간값:',s2.median())
print('표준편차:',s2.std())

'''
평균: 30.0
최소값: 10
최대값: 50
중간값: 30.0
표준편차: 15.811388300841896
'''

 

7.5  시리즈 주요 메서드

  • 시리즈.sort_values( ) : 값 정렬 (디폴트는 오름차순 : ascending=True, 내림차순 : ascending=False)
  • 시리즈.sort_index( ) : 인덱스 정렬
  • 시리즈.reset_index( ) : 인덱스 리셋 : --> 행번호로 인덱스 재지정
  • replace(찾을값, 교체할값) : 특정 값을 가진 시리즈 값을 교체 
  • 시리즈.to_frame( ) : 시리즈를 데이터프레임으로 변환
# s3의 value 중 10을 5로 교체
s3 = s3.replace(10,5)
s3
'''
0    1
1    3
2    2
3    4
4    5
dtype: int64
'''


# s3 정렬 (디폴트는 오름차순 : ascending=True)
s3.sort_values()
'''
0    1
2    2
1    3
3    4
4    5
dtype: int64
'''

#정렬
s3.sort_values(ascending=False)
'''
4    5
3    4
1    3
2    2
0    1
dtype: int64
'''


# s3을 데이터프레임으로 만들기
s3.to_frame()
'''

    0
0	1
1	3
2	2
3	4
4	5
'''

# 시리즈 인덱스 새로 만들기
s.reset_index()
'''
	index	0
0	name	amy
1	height	170
2	footsize	240
'''

 

 

8.  컬럼명으로 데이터 추출하기

8.1  시리즈 형태로 추출하기

  • 데이터프레임명['컬럼명'] / 데이터프레임명["컬럼명"]
    : 컬럼명은 1개만 지정할 수 있으며 대괄호 1개를 사용한다.
  • 데이터프레임명.컬럼명
    : 컬럼명에 공백이나 특수문자가 섞여있을 때는 사용할 수 없다.

 

8.2  데이터프레임 형태로 추출하기

  • 데이터프레임명[컬럼명리스트]
  • 대괄호안에 컬럼리스트가 들어간다.(대괄호 2개로 표현되어야한다.)
# 'name','kor' 컬럼 데이터 추출하기
df_name_kor = df[['name','kor']]   
df_name_kor.head(3)

'''
	name	kor
0	Aiden	100.0
1	Charles	90.0
2	Danial	95.0
'''


# 'math' 컬럼을 데이터프레임 형태로 추출하기
df_math = df[['math']] 
df_math


'''

	math
0	95.0
1	75.0
2	100.0
3	100.0
4	60.0

'''

 

8.3  조건에 따라 데이터 추출하기

(1)  조건의 결과에 따른 boolean index 추출

  • 조건식의 결과에 따른 결과가 boolean index로 만들어진다.
  • boolean index를 데이터프레임명[ ]으로 감싸주면 True인 데이터만 추출된다.
# kor 점수가 100점인 데이터 불린인덱스
df['kor']==100

'''
0      True
1     False
2     False
3      True
4     False
5     False
6     False
~
'''


df[df['kor']==100]

'''
	name	kor	eng	math
0	Aiden	100.0	90.0	95.0
3	Evan	100.0	100.0	100.0
9	Kevin	100.0	100.0	90.0
12	Peter	100.0	95.0	100.0
'''

 

(2) 여러 조건

  • 논리연산자는 '&' , '|' ,'~', '^' 기호를 사용한다.
  • 논리연산자를 사용할 때에는 각 조건을 ()로 감싼다.
# 한 과목이라도 100을 받은 학생 추출
df[(df.kor==100)|(df.eng==100)|(df.math==100)]

'''
	name	kor	eng	math
0	Aiden	100.0	90.0	95.0
2	Danial	95.0	100.0	100.0
3	Evan	100.0	100.0	100.0
~~~
'''

# kor의 값이 60~90인 학생의 name, kor 추출
df[(df['kor']>=60)&(df['kor']<=90)][['name','kor']]
'''

	name	kor
1	Charles	90.0
5	Ian	90.0
6	James	70.0
~~~~
'''

 

(3) 특정 값을 가진 데이터만 추출

  • 컬럼.isin(값리스트)
# 이름이 Amy인 데이터 추출
df[df['name'].isin(['Amy'])]
'''
	name	kor	eng	 math
13	Amy	90.0	75.0	90.0
'''

# 이름이 Amy, Rose인 데이터 추출
df[df['name'].isin(['Amy','Rose'])]
'''
	name	kor	eng	math
13	Amy	90.0	75.0	90.0
22	Rose	70.0	65.0	70.0

'''


# kor이 50,100 데이터 추출
df[df['kor'].isin([50,100])]
'''
	name	kor	eng	math
0	Aiden	100.0	90.0	95.0
3	Evan	100.0	100.0	100.0
8	Justin	50.0	60.0	100.0
'''

 

(4) null 여부에 따른 데이터 추출

  • 컬럼.isnull() --> 해당 컬럼의 값이 null인 데이터 추출
  • 컬럼.notnull() --> 해당 컬럼의 값이 null이 아닌 데이터 추출
# kor이 null인 데이터 추출
df[df.kor.isnull()]
'''
name	kor	eng	math
4	Henry	NaN	35.0	60.0
16	Ellen	NaN	60.0	NaN
27	Vikkie	NaN	50.0	100.0
'''

# kor이 null이 아닌 데이터 추출
df[df.kor.notnull()]
'''
	name	kor		eng		math
0	Aiden	100.0	90.0	95.0
1	Charles	90.0	80.0	75.0
2	Danial	95.0	100.0	100.0
3	Evan	100.0	100.0	100.0
'''

 

 

 

 

 

#유데미, #유데미코리아, #유데미부트캠프, #취업부트캠프, #부트캠프후기, #스타터스부트캠프, #데이터시각화 #데이터분석 #태블로

Comments