-
[Pandas#1] Pandas 기초Machine Learning/numpy & pandas & maplotlib 2023. 8. 5. 20:35
* pandas
- 표 형식의 데이터나 다양한 형태의 데이터를 다루는 데 초점을 맞춰 설계된 라이브러리.
- pandas는 배열 기반의 함수를 제공하는 등 numpy의 배열 기반 계산 스타일을 많이 차용했다.(numpy는 단일 산술 배열 데이터를 다루는 데 특화되어 있다.)
- pandas는 Series와 DataFrame 크게 두 가지 자료구조를 갖는다.
* import pandas as pd
라이브러리 호출. 관례적으로 pd로 이름을 지음.
# 데이터 불러오기 예시 data_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data' #Data URL # data_url = './housing.data' #Data URL df_data = pd.read_csv(data_url, sep='\s+', header = None) #csv 타입 데이터 로드, separate는 빈공간으로 지정하고, Column은 없음
* Series 자료구조(class)
- Series는 일련의 객체를 담을 수 있는 1차원 배열 같은 자료구조(class)다.(어떤 Numpy 자료형이라도 담을 수 있다).
- Series는 색인(index)이라는 배열의 데이터와 연관된 이름을 가지고 있다.
- Series와 DataFrame은 로컬 네임스페이스로 임포트하는 것이 훨씬 편하다.
- Series는 고정 길이의 정렬된 dictionary라고 생각하면 된다.(색인 값과 데이터 값을 매핑하고 있으므로)
import pandas as pd from pandas import Series, DataFrame obj= pd.Series([4, 7, -5, 3]) obj ----------------- 0 4 1 7 2 -5 3 3 dtype: int64
1.obj.values : (attribute) 배열을 반환
왼쪽 줄이 index 오른쪽 줄이 values다. 각각의 값은 Series의 attribute를 호출하여 얻을 수 있다.
>>>obj.values array([ 4, 7, -5, 3])
2. obj.index : (attribute) 인덱스의 객체를 반환
obj.index RangeIndex(start=0, stop=4, step=1)
다음과 같이 index에 이름을 부여할 수도 있다. 또한 대입하여 변경도 가능하다.(obj.index=[...])
obj= pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c']) obj ----------- d 4 b 7 a -5 c 3 dtype: int64
3. 파이썬의 사전 객체로부터 Series 객체를 생성할 수 있다.
capital_data={'한국':'서울', '중국':'베이징', '캐나다':'오타와'} obj3=pd.Series(capital_data) # 색인에는 사전의 키값이 순서대로 들어간다. obj3 ------------- 한국 서울 중국 베이징 캐나다 오타와 dtype: object
4. name : (attribute) Series 객체와 색인 모두 name속성을 갖고 있다.
obj.name='capital' obj.index.name='country' obj ---------- country 한국 서울 중국 베이징 캐나다 오타와 Name: capital, dtype: object
* DataFrame
- DataFrame은 표 같은 스프레이드시트 형식의 자료구조(class)이고, 여러 개의 컬럼이 있는데 각 컬럼은 서로 다른 종류의 값(숫자, 문자열, 불리언 등)을 담을 수 있다.
- DataFrame은 row와 column에 대한 색인을 가지고 있다.(색인의 모양이 같은 Series 객체를 담고 있는 파이썬 사전과 비슷)
- 내부적으로 데이터는 리스트나 사전 또는 1차원 배열을 담고 있는 다른 컬렉션이 아니라 하나 이상의 2차원 배열에 저장된다. (물리적으로 2차원이지만 계층적 색인을 이용해서 더 고차원의 데이터를 표현할 수 있다)
- 흔한 생성 방법은 같은 길이의 리스트에 담긴 사전을 이용하거나 numpy배열을 이용하는 것이다.
1. DataFrame의 색인은 Series와 같은 방식으로 자동으로 대입되며 컬럼은 정렬되어 저장된다.(코랩에선 자동 정렬 안 되는 듯 하다.)
data={'state':['Ohio','ohio','ohio', 'Nevada', 'Nevada', 'Nevada'], 'year': [2000, 2001, 2002, 2001, 2002, 2003], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]} frame=pd.DataFrame(data) frame ------------------------ state year pop 0 Ohio 2000 1.5 1 Ohio 2001 1.7 2 Ohio 2002 3.6 3 Nevada 2001 2.4 4 Nevada 2002 2.9 5 Nevada 2003 3.2
2. frame.head() : 처음 5개의 row만 출력한다.
frame.head() ------------------------ state year pop 0 Ohio 2000 1.5 1 Ohio 2001 1.7 2 Ohio 2002 3.6 3 Nevada 2001 2.4 4 Nevada 2002 2.9
3. DataFrame의 column은 사전 형식의 표기법이나 속성 형식으로 접근할 수 있다.
frame['state'] ---------------------- frame['state'] 0 Ohio 1 Ohio 2 Ohio 3 Nevada 4 Nevada 5 Nevada Name: state, dtype: object
# 속성 형식으로 column의 values에 접근방식은 # 파이썬에서 사용 가능한 변수 이름 형식일 때만 작동한다. frame.year --------------- 0 2000 1 2001 2 2002 3 2001 4 2002 5 2003 Name: year, dtype: int64
4. column 추가
frame=pd.DataFrame(data, index=['one','two','three','four','five','six']) val=pd.Series([-1.2, 1.5, -1.7,], index=['two', 'four', 'five']) # 새로운 series객체 생성 frame['debt']=val # 존재하지 않는 column을 대입하면 새로운 컬럼을 생성한다. frame ---------------------------- state year pop debt one Ohio 2000 1.5 NaN # NaN은 결측값 two Ohio 2001 1.7 -1.2 three Ohio 2002 3.6 NaN four Nevada 2001 2.4 1.5 five Nevada 2002 2.9 -1.7 six Nevada 2003 3.2 NaN
5. del 예약어 : column 삭제
# 'eastern' column 생성 frame['eastern']=frame.state=='Ohio' frame ----------------- state year pop debt eastern one Ohio 2000 1.5 NaN True two Ohio 2001 1.7 -1.2 True three Ohio 2002 3.6 NaN True four Nevada 2001 2.4 1.5 False five Nevada 2002 2.9 -1.7 False six Nevada 2003 3.2 NaN False
# 'eastern' column 삭제 del frame['eastern'] frame.columns ------------------------ Index(['state', 'year', 'pop', 'debt'], dtype='object') # 뷰
색인을 이용해서 얻은 컬럼은 내부 데이터에 대한 뷰(view)이며 복사가 이루어지지 않는다. 따라서 이렇게 얻은 Series 객체에 대한 변경은 실제 DataFrame에 반영된다. 복사본이 필요할 때는 Series의 copy 메서드를 이용해야한다.
6. T : ( attribute) column과 row를 뒤집는다.
frame.T ----------------------------------- one two three four five six state Ohio Ohio Ohio Nevada Nevada Nevada year 2000 2001 2002 2001 2002 2003 pop 1.5 1.7 3.6 2.4 2.9 3.2 debt NaN -1.2 NaN 1.5 -1.7 NaN
7. values : (attribute) DataFrame에 저장된 데이터를 2차원 배열로 반환한다.
DataFrame의 column이 서로 다른 dtype을 가지고 있다면 모든 column을 수용하기 위해 그 column의 배열의 dtype이 선택된다.
frame.values array([['Ohio', 2000, 1.5, nan], ['Ohio', 2001, 1.7, -1.2], ['Ohio', 2002, 3.6, nan], ['Nevada', 2001, 2.4, 1.5], ['Nevada', 2002, 2.9, -1.7], ['Nevada', 2003, 3.2, nan]], dtype=object)
* 참고
https://www.boostcourse.org/ai222
파이썬 라이브러리를 활용한 데이터분석 2판
'Machine Learning > numpy & pandas & maplotlib' 카테고리의 다른 글
[NumPy] np.pad에 대한 이해 (0) 2023.10.03 [numpy] axis, rank 이해. (n,)와(n,1)의 차이. keepdims (0) 2023.09.05 [NumPy] np.where() (0) 2023.08.04 [NumPy] np.random.rand(), RandomState(), randn(), randint(), random(), normal()정리 (0) 2023.08.04 [NumPy#1] 넘파이란? dtype, astype(), itemsize, size, shape (0) 2023.08.04