반응형
Notice
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

오식랜드

[python] pandas 시작하기 본문

dev-log/python

[python] pandas 시작하기

개발하는 오식이 2023. 1. 17. 18:28
반응형

출처 : 나도코딩 https://www.youtube.com/watch?v=PjhlUzp_cU0&t=10533

 

  • 설치
pip install pandas
  • import
import pandas as pd

Series

1차원의 데이터를 다룰 수 있음 (정수, 실수, 문자열 등)

temp = pd.Series([-20, -10, 10, 20])
print(temp)

0 -20

1 -10

2 10

3 20

데이터에 자동으로 index가 부여돼서 리스트처럼 사용할 수 있음

temp = pd.Series([-20, -10, 10, 20])
print(temp[0]) # 0번째 데이터 출력 : -20
print(temp[1]) # 1번째 데이터 출력 : -10
print(temp[3]) # 2번째 데이터 출력 : 10
print(temp[4]) # 3번째 데이터 출력 : 20

Series 객체 생성 (index명 지정)

Series함수에서 리스트를 넣었는데, 그 뒤에 ‘컴마+ index=[]’ 를 넣어주면서 index명을 지정해줄 수 있다.

temp = pd.Series([-20, -10, 10, 20], index=['Jan', 'Fed', 'Mar', 'Apr'])
print(temp)

Jan -20 Fed -10 Mar 10 Apr 20

그리고 각 데이터를 불러올 때에도 index명으로 불러올 수 있다

temp = pd.Series([-20, -10, 10, 20], index=['Jan', 'Fed', 'Mar', 'Apr'])
print(temp['Jan']) # index가 'Jan'인 데이터 출력 : -20
print(temp['Fed']) # index가 'Fed'인 데이터 출력 : -10
print(temp['Mar']) # index가 'Mar'인 데이터 출력 : 10
print(temp['Apr']) # index가 'Apr'인 데이터 출력 : 20

Data Frame

2차원 데이터 (Series의 모음)

Data 준비

사전(dictionaty) 자료 구조를 통해 생성

예 ) 슬램덩크 주요 인물 8명에 대한 데이터

data = {
    '이름' : ['채치수', '정대만', '송태섭', '서태웅', '강백호', '변덕규', '황태산', '윤대협'],
    '학교' : ['북산고', '북산고', '북산고', '북산고', '북산고', '능남고', '능남고', '능남고'],
    '키' : [197, 184, 168, 187, 188, 202, 188, 190],
    '국어' : [90, 40, 80, 40, 15, 80, 55, 100],
    '영어' : [85, 35, 75, 60, 20, 100, 65, 85],
    '수학' : [100, 50, 70, 70, 10, 95, 45, 90],
    '과학' : [95, 55, 80, 75, 35, 85, 40, 95],
    '사회' : [85, 25, 75, 80, 10, 80, 35, 95],
    'SW특기' : ['Python', 'Java', 'Javascript', '', '', 'C', 'PYTHON', 'C#']
}

Data Frame 객체 생성

df = pd.DataFrame(data)
print(df)

#출력내용
#    이름   학교    키   국어   영어   수학  과학  사회   SW특기
# 0  채치수  북산고  197   90   85  100  95  85      Python
# 1  정대만  북산고  184   40   35   50  55  25        Java
# 2  송태섭  북산고  168   80   75   70  80  75  Javascript
# 3  서태웅  북산고  187   40   60   70  75  80
# 4  강백호  북산고  188   15   20   10  35  10
# 5  변덕규  능남고  202   80  100   95  85  80           C
# 6  황태산  능남고  188   55   65   45  40  35      PYTHON
# 7  윤대협  능남고  190  100   85   90  95  95          C#

Data Frame 데이터 접근

기존의 dictionary처럼 대괄호[]로 접근 가능

print(df['이름'])
# 0    채치수
# 1    정대만
# 2    송태섭
# 3    서태웅
# 4    강백호
# 5    변덕규
# 6    황태산
# 7    윤대협

print(df['키'])
# 0    197
# 1    184
# 2    168
# 3    187
# 4    188
# 5    202
# 6    188
# 7    190

2개 이상의 데이터를 한번에 출력하고 싶을 땐 대괄호 안에 list를 넣어준다

print(df[['이름', '키']])
#    이름    키
# 0  채치수  197
# 1  정대만  184
# 2  송태섭  168
# 3  서태웅  187
# 4  강백호  188
# 5  변덕규  202
# 6  황태산  188
# 7  윤대협  190

Data Frame 객체 생성 (index 지정)

df = pd.DataFrame(data, index=['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번'])
     이름   학교    키   국어   영어   수학  과학  사회    SW특기
1번  채치수  북산고  197   90   85  100  95  85      Python        
2번  정대만  북산고  184   40   35   50  55  25        Java        
3번  송태섭  북산고  168   80   75   70  80  75  Javascript        
4번  서태웅  북산고  187   40   60   70  75  80
5번  강백호  북산고  188   15   20   10  35  10
6번  변덕규  능남고  202   80  100   95  85  80           C        
7번  황태산  능남고  188   55   65   45  40  35      PYTHON        
8번  윤대협  능남고  190  100   85   90  95  95          C#

컴마 후 index에 list로 넣어주면 된다.

이 때 행의 갯수보다 index list의 갯수가 모자르면 에러가 발생한다!

Data Frame 객체 생성 (column 지정)

데이터 중에서 원하는 column만 선택하거나 순서 변경이 가능하다

df = pd.DataFrame(data, columns=['이름', '학교', '키'])
print(df)
   이름    학교    키
0  채치수  북산고  197
1  정대만  북산고  184
2  송태섭  북산고  168
3  서태웅  북산고  187
4  강백호  북산고  188
5  변덕규  능남고  202
6  황태산  능남고  188
7  윤대협  능남고  190

순서 바꾸기

df = pd.DataFrame(data, columns=['학교', '이름', '키'])
print(df)
   학교    이름    키
0  북산고  채치수  197
1  북산고  정대만  184
2  북산고  송태섭  168
3  북산고  서태웅  187
4  북산고  강백호  188
5  능남고  변덕규  202
6  능남고  황태산  188
7  능남고  윤대협  190

Index

데이터에 접근할 수 있는 주소 값

위에서 index를 1~8번으로 수정했던 코드를 불러온다

그리고 df.index 를 print해주면 index를 확인할 수 있다.

import pandas as pd

# 사용할 데이터
data = {
    '이름' : ['채치수', '정대만', '송태섭', '서태웅', '강백호', '변덕규', '황태산', '윤대협'],
    '학교' : ['북산고', '북산고', '북산고', '북산고', '북산고', '능남고', '능남고', '능남고'],
    '키' : [197, 184, 168, 187, 188, 202, 188, 190],
    '국어' : [90, 40, 80, 40, 15, 80, 55, 100],
    '영어' : [85, 35, 75, 60, 20, 100, 65, 85],
    '수학' : [100, 50, 70, 70, 10, 95, 45, 90],
    '과학' : [95, 55, 80, 75, 35, 85, 40, 95],
    '사회' : [85, 25, 75, 80, 10, 80, 35, 95],
    'SW특기' : ['Python', 'Java', 'Javascript', '', '', 'C', 'PYTHON', 'C#']
}

# Data Frame에 index 지정
df = pd.DataFrame(data, index=['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번'])

# df의 index 출력
print(df.index) 

# Index(['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번'], dtype='object')

index 이름 설정

위에서 설정해준 index에도 이름을 붙여줄 수 있다

df.index.name = '지원번호'
print(df)
지원번호 이름   학교    키   국어   영어   수학  과학  사회        SW특기
1번    채치수  북산고  197   90   85  100  95  85      Python      
2번    정대만  북산고  184   40   35   50  55  25        Java      
3번    송태섭  북산고  168   80   75   70  80  75  Javascript      
4번    서태웅  북산고  187   40   60   70  75  80
5번    강백호  북산고  188   15   20   10  35  10
6번    변덕규  능남고  202   80  100   95  85  80           C      
7번    황태산  능남고  188   55   65   45  40  35      PYTHON      
8번    윤대협  능남고  190  100   85   90  95  95          C#

index 초기화

만약 index가 필요 없어졌을 땐 초기화를 해줄 수 있다

df에 reset_index()를 적용한 값을 재할당을 해주고 출력해본다.

  • reset_index
df = df.reset_index()
print(df)
  지원번호   이름   학교    키   국어   영어   수학  과학  사회  SW특기
0   1번  채치수  북산고  197   90   85  100  95  85      Python    
1   2번  정대만  북산고  184   40   35   50  55  25        Java    
2   3번  송태섭  북산고  168   80   75   70  80  75  Javascript    
3   4번  서태웅  북산고  187   40   60   70  75  80
4   5번  강백호  북산고  188   15   20   10  35  10
5   6번  변덕규  능남고  202   80  100   95  85  80           C    
6   7번  황태산  능남고  188   55   65   45  40  35      PYTHON    
7   8번  윤대협  능남고  190  100   85   90  95  95          C#

그러면 index로 사용하던 ‘지원번호’는 하나의 칼럼이 되고 다시 0~ index가 생성된다.

  • drop

그리고 ‘지원번호’를 없애고 index를 초기화하고 싶으면 reset함수에 파라미터를 보내주면 된다.

df = df.reset_index(drop=True)
print(df)
이름   학교    키   국어   영어   수학  과학  사회  SW특기
0  채치수  북산고  197   90   85  100  95  85      Python
1  정대만  북산고  184   40   35   50  55  25        Java
2  송태섭  북산고  168   80   75   70  80  75  Javascript
3  서태웅  북산고  187   40   60   70  75  80
4  강백호  북산고  188   15   20   10  35  10
5  변덕규  능남고  202   80  100   95  85  80           C
6  황태산  능남고  188   55   65   45  40  35      PYTHON
7  윤대협  능남고  190  100   85   90  95  95          C#
  • inplace

df라는 변수에 재할당하지 않고 실제 데이터에 바로 반영하는 방법도 있다

파라미터에 하나의 값을 더 보내주면 된다

df.reset_index(drop=True, inplace=True)
print(df)

기존 column을 index로 사용하기

  • set_index
df.set_index('이름', inplace=True)
print(df)
				학교    키   국어   영어   수학  과학  사회  SW특기    
이름
채치수  북산고  197   90   85  100  95  85      Python
정대만  북산고  184   40   35   50  55  25        Java
송태섭  북산고  168   80   75   70  80  75  Javascript
서태웅  북산고  187   40   60   70  75  80
강백호  북산고  188   15   20   10  35  10
변덕규  능남고  202   80  100   95  85  80           C
황태산  능남고  188   55   65   45  40  35      PYTHON
윤대협  능남고  190  100   85   90  95  95          C#

column 제목 중 ‘이름’이 아래로 내려오면서 index임이 표시된다.

index 정렬

index를 기준으로 오름차순, 내림차순 정렬이 가능하다

  • sort_index() : index 오름차순으로 정렬
    				학교    키   국어   영어   수학  과학  사회  SW특기
    이름
    강백호  북산고  188   15   20   10  35  10
    변덕규  능남고  202   80  100   95  85  80           C
    서태웅  북산고  187   40   60   70  75  80
    송태섭  북산고  168   80   75   70  80  75  Javascript
    윤대협  능남고  190  100   85   90  95  95          C#
    정대만  북산고  184   40   35   50  55  25        Java
    채치수  북산고  197   90   85  100  95  85      Python
    황태산  능남고  188   55   65   45  40  35      PYTHON
    
    이름 ㄱㄴㄷ순으로 정렬되었다
  • df.sort_index(inplace=True) print(df)
  • sort_index(ascending=False) : index 내림차순으로 정렬
             학교    키   국어   영어   수학  과학  사회  SW특기    
    이름
    황태산  능남고  188   55   65   45  40  35      PYTHON
    채치수  북산고  197   90   85  100  95  85      Python
    정대만  북산고  184   40   35   50  55  25        Java
    윤대협  능남고  190  100   85   90  95  95          C#
    송태섭  북산고  168   80   75   70  80  75  Javascript
    서태웅  북산고  187   40   60   70  75  80
    변덕규  능남고  202   80  100   95  85  80           C
    강백호  북산고  188   15   20   10  35  10
    
  • df.sort_index(ascending=False, inplace=True) print(df)
반응형

'dev-log > python' 카테고리의 다른 글

[python] pandas 데이터 확인  (0) 2023.01.17
[python] pandas 파일 저장 및 열기  (0) 2023.01.17
[python] 모듈 연습 - glob, os, datetime  (0) 2023.01.12
내장함수와 외장함수  (0) 2023.01.12
[python] pip install  (0) 2023.01.12
Comments