728x90
파이썬으로 데이터를 다루다 보면 리스트, 튜플, 딕셔너리를 사용하는 경우가 참 많습니다.
이 모두가 하나의 변수에 여러 값을 할당하는 자료형으로 배열의 형태를 가지고 있는데
각각 사용법이나 형태가 차이가 있고 상호 간 데이터 변환하여 사용해야 하는 경우도 많고 해서
간단하게 정리해 두려고 합니다.
리스트, 튜플, 딕셔너리 ( List, Tuple, Dictionary ) 차이점 비교
리스트 list | 튜플 tuple | 딕셔너리 |
변수 하나에 다수개의 값을 저장 변경 가능한 연속형 변수 (mutable) 리스트 추가, 변경, 삭제 가능 값들이 서로 다른 자료형도 가능 |
변경 불가능 (immutable) 변수 속도 빠름 |
사전처럼 키와 값을 쌍으로 저장 값에는 모든 자료형 사용 가능 - 인덱스로는 접근 불가하고 키로 접근 dict() 로 리스트, 튜플은 사용가능 |
[ ]로 묶고 콤마로 구분된 값을 나열 | ( ) 로 묶고 콤마로 구분된 값을 나열 | { } 를 사용 |
리스트 = [값, 값, 값] 리스트 = list() 또는 [] 리스트 = list(range(시작, 끝, 증가 폭)) |
튜플 = (값, 값, 값) 튜플 = 값, 값, 값 튜플 = (값, ) # 요소가 하나인 튜플 튜플 = 값, # 요소가 하나인 튜플 튜플 = tuple(range(시작, 끝, 증가 폭)) |
딕셔너리 = {키1: 값1, 키2: 값2, ........} 딕셔너리 = {} 또는 x = dict() 딕셔너리 = dict(zip([키1, 키2], [값1, 값2])) 딕셔너리 = dict([(키1, 값1), (키2, 값2)]) 딕셔너리 = dict({키1: 값1, 키2: 값2}) |
split(‘구분자’) : 구분자 기준 문자열 분리후 리스트반환 ‘연결자’.join() : 리스트들을 연결자로 연결하여 생성 sort() : 리스트 정렬 결과 반환 - 리스트형 만 가능 sorted() : 리스트 복사하여 정렬후 결과반환 - 리스트,딕셔너리,문자열,튜플도 가능 append() : 리스트 뒤에 그대로 추가 extend() : 반복자료형 내부의 각 원소 추가 replace(old, new) : 특정문자 변환 format() ; |
튜플[0:2] 같이 슬라이싱으로 데이터 접근 | 값 조회 : 딕셔너리[키] -인덱스로불가 값 추가 : 딕셔너리[키] = 값 값 삭제 : del 딕셔너리[키] 개수 확인 : len(딕셔너리) 키값 조회 : 딕셔너리.keys() 값들조회 : 딕셔너리.values() |
unpacking >>> x = [1, 2, 3] >>> a, b, c = x >>> print(a, b, c) 1 2 3 |
unpacking >>> x = (1, 2, 3) >>> a, b, c = x >>> print(a, b, c) 1 2 3 |
|
리스트 = list(튜플) 리스트 = list(딕셔너리.keys()) 리스트 = list(zip(딕셔너리.keys(), 딕셔너리.values())) |
튜플 = tuple(리스트) 튜플 = 딕셔너리.items() |
딕셔너리 = dict(zip(리스트1, 리스트2)) ##리스트1은 키값으로 2는 value로 tuple_list = [('A',1), ('B',2), ('C',3)] dictionary = dict(tuple_list) print(dictionary) ==> {'A': 1, 'B': 2, 'C': 3} |
## 사용예제1 :
for code_sector in code_list: ## 리스트 대신 튜플로 하는경우 속도 더 빠름
## 사용예제2 :
for key in 딕셔너리:
if type(딕셔너리[key]) is dict: # 딕셔너리 타입인지
for k in 딕셔너리[key]:
print('{} : {}'.format(k, 딕셔너리[key][k]))
elif type(딕셔너리[key]) is list: # 리스트타입인지
for item in 딕셔너리[key]:
print('{} : {}'.format(key, item))
else: # 이름, 레벨
print('{} : {}'.format(key, character[key]))
리스트 튜플을 데이터프레임으로 변환
data = [(튜플1,2,3,4 ), (튜플2,3,4,5)......]
df = pd.DataFrame(data, columns=['col1', 'col2', 'col3', 'col4'])
리스트를 시리즈와 데이터프레임으로 변환
시리즈 Series로 변환 | 데이터프레임으로 변환(list to DataFrame) |
import pandas as pd a = [10, 30, 20, 40] pd.Series(a) # 결과 0 10 1 30 2 20 3 40 |
a = [10, 30, 20, 40] b = ['a', 'g', 'h', 'c'] # 각 리스트를 행으로 취급 pd.DataFrame([a, b]) # 결과 0 1 2 3 0 10 30 20 40 1 a g h c |
import pandas as pd a = [10, 30, 20, 40] id = ['aaa', 'bbb', 'ccc', 'ddd'] # 인덱스를 id로 지정하고 싶은 경우 pd.Series(a, index = pd.Index(id)) # 결과 aaa 10 bbb 30 ccc 20 ddd 40 |
a = [10, 20, 30, 40] b = ['a', 'g', 'h', 'c'] # 각 리스트를 열로 취급 pd.DataFrame( zip(a, b) ) # 결과 0 1 0 10 a 1 30 g 2 20 h 3 40 c ------------------------------------------- # 인덱스와 열명을 지정하고자 할때 pd.DataFrame(zip(a, b), index = pd.Index(['aa', 'bb', 'cc', 'dd']), columns = ['col1', 'col2']) # 결과 col1 col2 aa 10 a bb 20 g cc 30 h dd 40 c |
딕셔너리를 시리즈와 데이터프레임으로 변환
시리즈 Series로 변환 | 데이터프레임으로 변환(list to DataFrame) |
b = {'aaa' : 10, 'bbb' : 20, 'ccc' : 30} pd.Series(b) # 결과 aaa 10 bbb 20 ccc 30 |
a = {'col1' : [123, 456, 789], 'col2' : ['aaa', 'bbb', 'ccc']} pd.DataFrame(a) # 결과 col1 col2 0 123 aaa 1 456 bbb 2 789 ccc ## 딕셔너리의 각 key를 column 이름으로, value를 column의 원소들로 가지는 데이터프레임을 만들때 ### |
리스트와 Numpy의 array 차이점 비교
구분 | list | numpy array |
자료형 | a = [1, 3, 5, 'a', 'b'] # #=> 1, 3, 5는 숫자형, 'a', 'b'는 문자열 |
import numpy as np b = np.array([1, 3, 5, 'a', 'b']) ##=> '1', '3', '5', 'a', 'b'의 문자열로 전환 |
데이터 수 | a = [[1], [3, 5], [2, 4, 6]] # 정상처리됨 |
b = np.array([[1], [3, 5], [2, 4, 6]]) # 개수가 달라서 array 선언 불가능 |
연산의미 | a = [1, 3, 5] b = [2, 4, 6] a + b # 결과 : [1, 3, 5, 2, 4, 6] # 허용하지 않음 : a - b, a * b, a / b a * 3 # 결과 : [1, 3, 5, 1, 3, 5, 1, 3, 5] ---------------------------------------------------- ### 연산을 하려면 add_list = [ a[i] + b[i] for i in range(len(a)) ] print(add_list) # 결과 : [3, 7, 11] |
a = np.array([1, 3, 5]) b = np.array([2, 4, 6]) a + b # array([ 3, 7, 11]) a * b # array([ 2, 12, 30]) a + 2 # array([3, 5, 7]) a * 3 # array([ 3, 9, 15]) |
메소드 | a.append(7) a.extend([9]) a.remove(9) |
b.mean() b.argmax() b.round() |
연산속도 | - | 약 10배 정도 빠름 (연산종류따라 차이있음) |
728x90
728x90
'데이터 분석 환경' 카테고리의 다른 글
파이썬 데이터프레임 Dataframe Pivot 결과 plotly로 차트 그리기 (0) | 2023.04.09 |
---|---|
데이터 처리를 위한 파이썬 Pandas 와 Numpy 기본 이해하기 (0) | 2023.04.07 |
SQlite3 , SQlite DB-Browser, ODBC 드라이버 다운로드 설치 (0) | 2023.03.23 |
파이썬 Python 에서 Sqlite3 Query 사용하기 (0) | 2023.03.21 |
댓글