일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- dataframe
- 백준
- 수학
- spring
- c
- Codility
- CSS
- grid
- Gap
- align-items
- stl
- Javascript
- Prefix Sums
- 상태
- Flexbox
- 소수
- Design Pattern
- series
- SK바이오사이언스
- 포토샵
- 강화학습
- c++
- 통신사할인
- margin
- pandas
- Photoshop
- 알고리즘
- 확률
- skt membership
- 에라토스테네스의 체
Archives
- Today
- Total
sliver__
[Pandas 데이터 분석] Chapter 1 - 판다스 입문(1) 본문
728x90
[판다스 자료구조]
- 분석을 위해 다향한 소스로부터 수집하는 데이터는 형태나 속성이 매우 다양하다.
- 다른 형식을 갖는 여러 종류의 데이터를 컴퓨터가 이해할 수 있도록 동일한 형식을 갖는 구조로 통합 필요.
- 판다스 시리즈(Series), DataFrame이라는 구조화된 데이터 형식을 제공
- Series는 1차원 배열, DataFrame은 2차원 배열이다.
[시리즈(Series)]
[시리즈만들기]
- 데이터가 순차적으로 나열된 1차원 배열의 형태.
- {Key : value} 의 형태.
- Dictionary가 Series와 구조가 비슷하기 때문에 변환하는 방법을 많이 사용
-
#Dictionary to Series pandas.Series( 딕셔너리 )
[인덱스 구조]
- 인덱스 종류 : 정수형 위치 인덱스, 인덱스 이름
import pandas as pd
list_data = ['2019-01-02', 3.14, 'ABC', 100, True]
sr = pd.Series(list_data)
print(sr)
idx = sr.index
val = sr.values
print(idx)
print('\n')
print(val)
0 2019-01-02
1 3.14
2 ABC
3 100
4 True
dtype: object
RangeIndex(start=0, stop=5, step=1)
['2019-01-02' 3.14 'ABC' 100 True]
[원소 선택]
- 인덱스를 사용하여 시리즈의 원소를 선택
- 하나의 원소 선택 또는 여러 원소를 한꺼번에 선택도 가능
- 인덱스를 이름으로 접근할 때 "", ''로 접근 가능
- Series api에 index옵션을 사용하면 인덱스 이름을 지정가능
- dtype = object는 문자열이다
import pandas as pd
tup_data = ('영인', '2010-05-01', '여', True)
sr = pd.Series(tup_data, index=['이름', '생년월일', '성별', '학생여부'])
print(sr)
print(sr[0])
print(sr['이름'])
idx = sr.index
values = sr.values
print(idx)
print('\n')
print(values)
print('\n')
print(sr[0:2])
print('\n')
print(sr[[0,2]])
print('\n')
print(sr[[1,2]])
print(sr[['생년월일', '이름']])
#여러 개의 원소를 선택(인덱스 범위 지정)
print(sr[1:2])
print('\n')
print(sr['생년월일' : '성별'])
이름 영인
생년월일 2010-05-01
성별 여
학생여부 True
dtype: object
영인
영인
Index(['이름', '생년월일', '성별', '학생여부'], dtype='object')
['영인' '2010-05-01' '여' True]
이름 영인
생년월일 2010-05-01
dtype: object
이름 영인
성별 여
dtype: object
생년월일 2010-05-01
성별 여
dtype: object
생년월일 2010-05-01
이름 영인
dtype: object
생년월일 2010-05-01
dtype: object
생년월일 2010-05-01
성별 여
dtype: object
[데이터프레임]
- 2차원 배열
- 여러 개의 시리즈들이 모여서 데이터프레임을 이루는 구조
- 데이터프레임의 열은 시리즈 객체
- 열은 공통의 속성을 갖는 일련의 데이터
- 행은 개별 관측대상에 대한 속성 데이터들의 모임인 record
#딕셔너리 -> 데이터프레임
pandas.DataFrame( 딕셔너리 객체 )
import pandas as pd
dict_data = {'c0':[1,2,3], 'c1':[4,5,6], 'c2':[7,8,9], 'c3' : [10,11,12], 'c4' : [13,14,15]}
df = pd.DataFrame(dict_data)
print(type(df))
print('\n')
print(df)
c0 c1 c2 c3 c4
0 1 4 7 10 13
1 2 5 8 11 14
2 3 6 9 12 15
[행 인덱스/열 이름 설정]
#행 인덱스 / 열 이름 설정
pandas.DataFrame(2차원 배열, index = 행 인덱스 배열, columns = 열 이름 배열)
import pandas as pd
df = pd.DataFrame([[15, '남', '덕영중'], [17, '여', '수리중']], index=['준서', '예은'], columns=['나이', '성별', '학교'])
print(df)
index = df.index
col = df.columns
print('\n')
print(index)
print('\n')
print(col)
나이 성별 학교
준서 15 남 덕영중
예은 17 여 수리중
Index(['준서', '예은'], dtype='object')
Index(['나이', '성별', '학교'], dtype='object')
- 리스트를 원소로 가지는 딕셔너리는 리스트가 열로 변환되지만 2차원 배열의 리스트는 행으로 변환된다.
#행 인덱스 변경
DataFrame 객체.index = 새로운 행 인덱스 배열
DataFrame 객체.columns = 새로운 열 이름 배열
df.index = ['학생 1', '학생 2']
df.columns = ['연령', '남녀', '소속']
print(df)
연령 남녀 소속
학생 1 15 남 덕영중
학생 2 17 여 수리중
# 행 인덱스 변경
# rename은 새로운 객체 return, 원본 객체 유지 시 inplace = True로 설정
DataFrame 객체.rename (index = {기존 인덱스 : 새로운 인덱스}, inplace = ...)
DataFrame 객체.rename (columns = {기존 인덱스 : 새로운 인덱스}, inplace = ...)
import pandas as pd
df = pd.DataFrame([[15, '남', '덕영중'], [17 , '여', '수리중']], index=['준서', '예은'], columns=['나이', '성별', '학교'])
print(df)
print('\n')
print("id : ", id(df))
df.rename(columns={'나이':'연령', '성별':'남녀', '학교':'소속'}, inplace=True)
df.rename(index={'준서':'학생 1', '예은':'학생 2'},inplace=True)
print(df)
print("id : ", id(df))
나이 성별 학교
준서 15 남 덕영중
예은 17 여 수리중
id : 4413159744
연령 남녀 소속
학생 1 15 남 덕영중
학생 2 17 여 수리중
id : 4413159744
[행/열 삭제]
# 행 삭제
# inplace : 객체 유지 여부
DataFrame 객체.drop(행 인덱스 또는 배열, axis = 0, inplace = ...)
DataFrame 객체.drop(열 이름 또는 배열, axis = 1, inplace = ...)
import pandas as pd
exam_data = {'수학' : [90,80,70], '영어' : [90,80,70], '음악' : [90,80,70], '체육' : [90,80,70]}
df = pd.DataFrame(exam_data, index=['서준', '우현', '인아'])
print(df)
print('\n')
df2 = df[:]
df2.drop('서준', axis=0,inplace=True)
print(df2)
print('\n')
df3 = df[:]
print(id(df3))
print('\n')
df3 = df3.drop(['우현','인아'],axis=0)
print(df3)
print(id(df3))
수학 영어 음악 체육
서준 90 90 90 90
우현 80 80 80 80
인아 70 70 70 70
수학 영어 음악 체육
우현 80 80 80 80
인아 70 70 70 70
4376995152
수학 영어 음악 체육
서준 90 90 90 90
4746464896
import pandas as pd
exam_data = {'수학' : [90,80,70], '영어' : [90,80,70], '음악' : [90,80,70], '체육' : [90,80,70]}
df = pd.DataFrame(exam_data, index=['a','b','c'])
print('id : ', id(df))
print(df)
print('\n')
df2 = df[:]
df2.drop(['수학','영어'],axis=1,inplace=True)
print('id : ', id(df2))
print(df2)
print('\n')
df3 = df[:]
df3 = df3.drop('체육', axis=1)
print('id : ', id(df3))
print(df3)
print('\n')
id : 4536413296
수학 영어 음악 체육
a 90 90 90 90
b 80 80 80 80
c 70 70 70 70
id : 4562290912
음악 체육
a 90 90
b 80 80
c 70 70
id : 4830397056
수학 영어 음악
a 90 90 90
b 80 80 80
c 70 70 70
[행 선택]
구분 | loc | iloc |
탐색 대상 | 인덱스 이름 | 정수형 위치 인덱스 |
범위 지정 | ['a' : 'c'] -> c 포함 | [3:7] -> 7 포함X |
[열 선택]
# 열 1개 생성(시리즈)
DataFrame 객체['열 이름']
DataFrame 객체.'열 이름'
# 열 n개 선택(데이터프레임 생성)
DataFrame 객체 [ [열1, 열2, ..., 열 n]]
Reference : 파이썬 머신러닝 판다스 데이터 분석
728x90
'CS > Pandas' 카테고리의 다른 글
[Pandas 데이터 분석] Chapter 5 - 데이터 사전 처리 (0) | 2022.02.26 |
---|---|
[Pandas 데이터 분석] Chapter 3 - 데이터 살펴보기(2) (0) | 2022.02.23 |
[Pandas 데이터 분석] Chapter 3 - 데이터 살펴보기(1) (0) | 2022.02.23 |
[Pandas 데이터 분석] Chapter 2 - 데이터 입출력 (0) | 2022.02.21 |
[Pandas 데이터 분석] Chapter 1 - 판다스 입문(2) (0) | 2022.02.16 |
Comments