[Python] 판다스(pandas)_3. 딕셔너리(dict), set_index, indexing, slicing, OrderedDict
#정리
#03dict - 딕셔너리를 활용하여 데이터프레임을 다룬다.
#데이터 프레임은 dict 타입으로 생성하며, 데이터는 list,tuple type만 사용 가능, set type X
- emp = {'emp_id':[100,101,200,201,300,400], , ,}
#전체 데이터 확인 (select * from emp)
- print(pd.DataFrame(emp))# pd.DataFrame(emp).info() : 데이터 정보 확인
- print(pd.DataFrame(emp).info())
#pd.DataFrame(emp).set_index('emp_id') : 컬럼을 인덱스로 지정 : 중복 값이 없어야 한다.
- print(pd.DataFrame(emp).set_index('emp_id'))
#pd.DataFrame(emp), columns=['컬럼1','컬럼2'...] : 출력되는 컬럼의 순서를 지정가능 (select 'emp_id','name','salary','dept_id','location' from emp)** 컬럼명 오타시 데이터가 NaN으로 표시됨.
- print(pd.DataFrame(emp, columns = ['emp_id','name','salary','dept_id','location']))
#index 재설정
- print(pd.DataFrame(emp, index = [1,2,3,4,5,6]))
- print(pd.DataFrame(emp, index = [i for i in range(1,6+1)]))
- print(pd.DataFrame(emp, index = range(1,6+1)))
** 데이터의 갯수(len(emp_id))를 활용하여 인덱스 설정 범위 지정
- print("len(emp['emp_id']):",len(emp['emp_id']))
- print(pd.DataFrame(emp, index = range(1,1+len(emp['emp_id'])))) #정수 인덱스
- print(pd.DataFrame(emp, index = [chr(i) for i in range(65,65+len(emp['emp_id']))])) #문자 인덱스
#OrderedDict : 컬럼의 순서를 보장받는 타입의 dict
- 데이터가 전부 tuple type으로 들어간다.
#head( ), tail( ) : 특정 행만 읽어오기
- print(pd.DataFrame(emp).head()) #위에서 5행만 읽기
- print(pd.DataFrame(emp).head(3)) #위에서 3행만 읽기
- print(pd.DataFrame(emp).tail()) #아래에서 5행만 읽기
- print(pd.DataFrame(emp).tail(3)) #아래에서 3행만 읽기
#03dict - 딕셔너리를 활용하여 데이터프레임을 다룬다.
#데이터 프레임은 dict 타입으로 생성하며, 데이터는 list,tuple type만 사용 가능, set type X
- emp = {'emp_id':[100,101,200,201,300,400], , ,}
emp = {
'emp_id':[100,101,200,201,300,400],
'name':('kim','lee','choi','han','gang','yoon'),
'salary':[8000000,7000000,7500000,5000000,4000000,6000000],
'dept_id':[1,1,2,2,3,4],
'location':['seoul','seoul','busan','busan','daegu','incheon']
}
print(emp)
#전체 데이터 확인 (select * from emp)
- print(pd.DataFrame(emp))
emp_id name salary dept_id location
0 100 kim 8000000 1 seoul
1 101 lee 7000000 1 seoul
2 200 choi 7500000 2 busan
3 201 han 5000000 2 busan
4 300 gang 4000000 3 daegu
5 400 yoon 6000000 4 incheon
# pd.DataFrame(emp).info() : 데이터 정보 확인
- print(pd.DataFrame(emp).info())
#pd.DataFrame(emp).set_index('emp_id') : 컬럼을 인덱스로 지정 : 중복 값이 없어야 한다.
- print(pd.DataFrame(emp).set_index('emp_id'))
#pd.DataFrame(emp), columns=['컬럼1','컬럼2'...] : 출력되는 컬럼의 순서를 지정가능 (select 'emp_id','name','salary','dept_id','location' from emp)
** 컬럼명 오타시 데이터가 NaN으로 표시됨.
- print(pd.DataFrame(emp, columns = ['emp_id','name','salary','dept_id','location']))
#index 재설정
- print(pd.DataFrame(emp, index = [1,2,3,4,5,6]))
- print(pd.DataFrame(emp, index = [i for i in range(1,6+1)]))
- print(pd.DataFrame(emp, index = range(1,6+1)))
** 데이터의 갯수(len(emp_id))를 활용하여 인덱스 설정 범위 지정
- print("len(emp['emp_id']):",len(emp['emp_id']))
- print(pd.DataFrame(emp, index = range(1,1+len(emp['emp_id'])))) #정수 인덱스
- print(pd.DataFrame(emp, index = [chr(i) for i in range(65,65+len(emp['emp_id']))])) #문자 인덱스
#OrderedDict : 컬럼의 순서를 보장받는 타입의 dict
- 데이터가 전부 tuple type으로 들어간다.
from collections import OrderedDict
emp = OrderedDict([
('emp_id',[100,101,200,201,300,400,500]),
('name',('kim','lee','choi','han','gang','yoon','yoon')),
('salary',[8000000,7000000,7500000,5000000,4000000,6000000,6000000]),
('dept_id',[1,1,2,2,3,4,5]),
('location',['seoul','seoul','busan','busan','daegu','incheon','incheon']),
])
print(pd.DataFrame(emp))
#head( ), tail( ) : 특정 행만 읽어오기
- print(pd.DataFrame(emp).head()) #위에서 5행만 읽기
- print(pd.DataFrame(emp).head(3)) #위에서 3행만 읽기
- print(pd.DataFrame(emp).tail()) #아래에서 5행만 읽기
- print(pd.DataFrame(emp).tail(3)) #아래에서 3행만 읽기
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
#from numpy import *
#from pandas import Series,DataFrame
#Series,DataFrame 는 pd.Series라고 안적고, pd. 까지만 적어도 된다.
print("numpy version",pd.__version__) #pandas version check
print("---------------")
#dict = list,tuple type만 데이터로 사용 가능, set type X
emp = {
'emp_id':[100,101,200,201,300,400],
'name':('kim','lee','choi','han','gang','yoon'),
'salary':[8000000,7000000,7500000,5000000,4000000,6000000],
'dept_id':[1,1,2,2,3,4],
'location':['seoul','seoul','busan','busan','daegu','incheon']
}
print(emp)
print("--pd.DataFrame()---")
#빈 데이터 확인 시도 시
print(pd.DataFrame())
#Empty DataFrame
#Columns: []
#Index: []
print("---pd.DataFrame(emp)---")
#전체 데이터 확인
#select * from emp
print(pd.DataFrame(emp))
# emp_id name salary dept_id location
#0 100 kim 8000000 1 seoul
#1 101 lee 7000000 1 seoul
#2 200 choi 7500000 2 busan
#3 201 han 5000000 2 busan
#4 300 gang 4000000 3 daegu
#5 400 yoon 6000000 4 incheon
print("---pd.DataFrame(emp).info()----")
#데이터 정보 확인
print(pd.DataFrame(emp).info())
print("---pd.DataFrame(emp).set_index('emp_id')----")
#컬럼을 인덱스로 지정 : 중복 값이 없어야 한다.
print(pd.DataFrame(emp).set_index('emp_id'))
print("---pd.DataFrame(emp), columns=['컬럼1','컬럼2'...]----")
#출력되는 컬럼의 순서를 지정가능.
#emp_id name salary dept_id location
#select 'emp_id','name','salary','dept_id','location' from emp
print(pd.DataFrame(emp, columns = ['emp_id','name','salary','dept_id','location']))
#컬럼명 오타시 데이터가 NaN으로 표시됨.
#print(pd.DataFrame(emp, columns = ['emp_id','naㅁㅁme','salary','dept_id','location']))
print("---index 설정...----")
#print(pd.DataFrame(emp, index = [1,2,3,4,5,6]))
print(pd.DataFrame(emp, index = [i for i in range(1,6+1)]))
print(pd.DataFrame(emp, index = range(1,6+1)))
print("-----------")
emp = {
'emp_id':[100,101,200,201,300,400,500],
'name':('kim','lee','choi','han','gang','yoon','yoon'),
'salary':[8000000,7000000,7500000,5000000,4000000,6000000,6000000],
'dept_id':[1,1,2,2,3,4,5],
'location':['seoul','seoul','busan','busan','daegu','incheon','incheon']
}
print(emp)
#데이터의 갯수(len(emp_id))를 활용하여 인덱스 설정 범위 지정
print("len(emp['emp_id']):",len(emp['emp_id']))
print(pd.DataFrame(emp, index = range(1,1+len(emp['emp_id'])))) #정수 인덱스
print(pd.DataFrame(emp, index = [chr(i) for i in range(65,65+len(emp['emp_id']))])) #문자 인덱스
print("===OrderedDict : 컬럼의 순서를 보장 =====")
#오더드딕트(ordered dict) : 컬럼의 순서를 보장받는 타입의 dict
#데이터가 전부 tuple type으로 들어간다.
from collections import OrderedDict
emp = OrderedDict([
('emp_id',[100,101,200,201,300,400,500]),
('name',('kim','lee','choi','han','gang','yoon','yoon')),
('salary',[8000000,7000000,7500000,5000000,4000000,6000000,6000000]),
('dept_id',[1,1,2,2,3,4,5]),
('location',['seoul','seoul','busan','busan','daegu','incheon','incheon']),
])
print(pd.DataFrame(emp))