Python

[Python] 판다스(pandas)_3. 딕셔너리(dict), set_index, indexing, slicing, OrderedDict

걍작 2022. 4. 16. 18:32

#정리

#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))