2021. 7. 1. 11:20ㆍ(Python) Pandas를 이용한 데이터분석
시리즈는 Pandas 에서 사용되는 딕셔너리와 흡사한 자료형이다.
인덱스는 자기와 짝을 이루는 데이터 값의 순서와 주소를 저장한다.
인덱스를 잘 활용하면 데이터 값의 탐색, 정렬, 선택 , 결합 등 데이터 조작을 쉽게 할수있다.
인덱스에는 정수형 위치 인덱스와 인덱스 이름 또는 인덱스 라벨 이 그것이다.
import pandas as pd
dict_data = {'a':1, 'b':2, 'c':3}
#판다스 Series 함수로 dictionary를 Series로 변환
sr = pd.Series(dict_data)
#sr의 자료형 출력
print(type(sr))
print('\n')
print(sr)
<class 'pandas.core.series.Series'>
a 1
b 2
c 3
위와 같이 type은 series라고 나오고 인덱스에 맞는 데이터값이 나온다.
리스트를 시리즈로 변환
#리스트를 시리즈로 변환하여 변수 sr에 저장
list_data = ['2019-01-02',3.14,'ABC',100,True]
sr = pd.Series(list_data)
print(sr)
0 2019-01-02
1 3.14
2 ABC
3 100
4 True
dtype: object
튜플을 시리즈로 변환
tup_data = ('영인','2010-0501','여',True)
sr = pd.Series(tup_data,index=['이름','생년월일','성별','학생여부'])
print(sr)
이름 영인
생년월일 2010-0501
성별 여
학생여부 True
dtype: object
튜플을 만들어주고 Series에 넣어줄때 value에 맞는 index 리스트를 만들어주면 매칭되어서 나온다.
#여러 개의 원소를 선택(인덱스 리스트 활용)
print(sr[[1,2]])
print('\n')
print(sr[['생년월일','성별']])
#여러 개의 원소를 선택(인덱스 범위 사용)
print(sr[1:2])
print('\n')
print(sr['생년월일':'성별'])
여러개의 원소를 선택할때 리스트와 범위를 사용할수있다.
데이터 프레임은 2차원 배열이다. 행과 열로 만들어지는 2차원 배열 구조는 마이크로소프트 엑셀과 관계형 데이터베이스 등 컴퓨텉 관련 다양한 분야에서 사용된다.
데이터 프레임의 열(Column)은 공통의 속성을 갖는 일련의 데이터를 나타내고,
행(Row)은 개별 관측대상에 대한 다양한 속성 데이터들의 모음인 레코드가 된다.
#데이터 프레임 만들기 딕셔너리 -> 데이터 프레임
#열 이름을 key로 하고, 리스트를 value로 갖는 딕셔너리 정의(2차원 배열)
dict_data = {'c0':[1,2,3],'c1':[4,5,6,],'c2':[7,8,9],'c3':[10,11,12],'c4':[13,14,15]}
#판다스 DataFrame 함수로 딕셔너리를 데이터프레임으로 변환
df = pd.DataFrame(dict_data)
#df 의 자료형출력
print(type(df))
<class 'pandas.core.frame.DataFrame'>
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
행 인덱스,열 이름을 지정해서 만들어줄수도 있다.
#행 인덱스/열 이름 지정하여 데이터프레임만들기
df = pd.DataFrame([[15,'남','덕영중'],[17,'여','수리중']],
index =['준서','예은'],
columns=['나이','성별','학교'])
#행 인덱스 , 열 이름 확인하기
print(df)
나이 성별 학교
준서 15 남 덕영중
예은 17 여 수리중
print(df.index)
Index(['준서', '예은'], dtype='object')
print(df.columns)
Index(['나이', '성별', '학교'], dtype='object')
리스트가 행으로 바뀐다. 앞에서 리스트를 원소로 갖는 딕셔너리를 이용했을 때는 리스트가 열이 된것과 차이가 있다.
인덱스 와 컬럼을 바꿀수도있다.
df.index = ['학생1','학생2']
df.columns = ['연령','남녀','소속']
print(df)
연령 남녀 소속
학생1 15 남 덕영중
학생2 17 여 수리중
print(df.index)
Index(['학생1', '학생2'], dtype='object')
print(df.columns)
Index(['연령', '남녀', '소속'], dtype='object')
print(df)
print('\n')
나이 성별 학교
준서 15 남 덕영중
예은 17 여 수리중
#열 이름중 나이-> 연령 성별 -> 남녀 학교->소속 으로
df.rename(columns={'나이':'연령','성별':'남녀','학교':'소속'},inplace=True)
#df의 행 인덱스 중에서 '준서'를 '학생1'로 '예은'을 '학생2'로 바꾸기
df.rename(index= {'준서':'학생1','예은':'학생2'},inplace=True)
print(df)
연령 남녀 소속
학생1 15 남 덕영중
학생2 17 여 수리중
rename 파라미터중에 inplace는 원본객체를 바꿀것인가 라는 것이므로 True를 해주지 않으면 새로운 객체가 생성되고원본이 바뀌지 않는다.
데이터 프레임에서 삭제를 할수도 있다.
exam_data = {'수학':[90,80,70],'영어':[98,89,95],'음악':[85,95,100],'체육':[100,90,90]}
df = pd.DataFrame(exam_data,index=['서준','우현','인아'])
print(df)
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
인아 70 95 100 90
#df2에 df를 복사
df2 = df[:]
df2.drop('우현',inplace=True)
print(df2)
수학 영어 음악 체육
서준 90 98 85 100
인아 70 95 100 90
#df3에 df를 복사하고 2개 행 제거
df3 = df[:]
df3.drop(['우현','인아'],axis=0,inplace=True)
print(df3)
수학 영어 음악 체육
서준 90 98 85 100
행을 삭제할때는 axis = 0 옵션을 넣고 열을 삭제할땐 axis = 1 옵션을 넣는다.
열을 삭제해보자
#데이터프레임 df를 복제하여 변수 df4에 저장 df4의 1개의 열 삭제
df4 = df.copy()
df4.drop('수학',axis=1,inplace=True)
print(df4)
영어 음악 체육
서준 98 85 100
우현 89 95 90
인아 95 100 90
#데이터프레임 df를 복제하여 변수 df5에 저장 df5의 2개의 열 삭제
df5 = df.copy()
df5.drop(['영어','음악'],axis = 1,inplace = True)
print(df5)
수학 체육
서준 90 100
우현 80 90
인아 70 90
행을 선택해서 출력할수도 있다.
행을 선택할때는 loc과 iloc이라는 인덱서가 있는데
인덱스 이름을 기준으로 행을 선택할때는 loc을 이용하고. 정수형 위치 인덱스를 사용할때는 iloc을 사용한다.
labell = df.loc['서준'] #서준행 선택
positionl = df.iloc[0] #0번째 행 선택
print(labell)
수학 90
영어 98
음악 85
체육 100
Name: 서준, dtype: int64
# print('\n')
print(positionl)
수학 90
영어 98
음악 85
체육 100
Name: 서준, dtype: int64
하나의 행을 선택하는 것이 아니라 여러행을 선택할수도 있다.
label2 = df.loc[['서준','우현']] #서준 우현 선택
position2 = df.iloc[[0,1]] # 0번째, 1번째 행 선택
print(label2)
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
print(position2)
수학 영어 음악 체육
서준 90 98 85 100
우현 80 89 95 90
기본적인 것들은 익히고 중수가 되어서 돌아오겠다.....
기본적인 문법들을 포스팅하려니.. 너무 기본적인거 같기도하고..
빨리빨리 해서 넘어가야하는데 시간이 오래걸린다.
제대로된 포스팅을 곧 이어가겠다.
'(Python) Pandas를 이용한 데이터분석' 카테고리의 다른 글
Seaborn 을 이용한 데이터 시각화 (0) | 2021.07.09 |
---|---|
여러가지 시각화 그래프(Histogram & Scatter & Pie Chart & Box Plot) (0) | 2021.07.09 |
Matplotlib 을 통한 인구 이동 그래프(2) (0) | 2021.07.08 |
Matplotlib 을 통한 인구 이동 그래프(1) (0) | 2021.07.08 |
구글 지오코딩 API 를 통해 위도,경도 데이터 가져오기 (0) | 2021.07.03 |