오식랜드
[python] pandas 시작하기 본문
출처 : 나도코딩 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 |