본문 바로가기

😀 기초/판다스(Pandas)

4.1장 판다스 패키지의 소개(4.1_데이터프레임 클래스)

4.1 판다스 패키지의 소개(데이터프레임 클래스) 

결과 값들이 밀려서, jupyter notebook 으로 다시 보기

 

1. 데이터프레임 클래스

- 시리즈가 1차원 벡터 데이터에 행방향 인덱스를 붙인 것이라면
- 데이터프레임 클래스는 2차원 행렬 데이터에 인덱스를 붙인 것과 비슷
- 2차원이므로 각각의 행 데이터의 이름이 되는 행 인덱스뿐 아니라 각각의 열 데이터의 이름이 되는 열 인덱스도 붙일 수 있다.

 

2. #### 데이터프레임 생성
- 데이터프레임을 만드는 방법은 다양. 가장 간단한 방법은 다음과 같다.
- 1. 우선 하나의 열이 되는 데이터를 리스트나 일차원 배열을 준비
- 2. 이 각각의 열에 대한 이름(라벨)을 키로 가지는 딕션너리 만든다.
- 3. 이데터를 DataFrame 클래스 생성자에 넣는다.
     동시에 열방향 인덱스는 columns 인수로, 행방향 인덱스는 index 인수로 지정.

data = {
    "2015": [9904312, 3448737, 2890451, 2466052],
    "2010": [9631482, 3393191, 2632035, 2431774],
    "2005": [9762546, 3512547, 2517680, 2456016],
    "2000": [9853972, 3655437, 2466338, 2473990],
    "지역": ["수도권", "경상권", "수도권", "경상권"],
    "2010-2015 증가율": [0.0283, 0.0163, 0.0982, 0.0141]
}
columns = ["지역", "2015", "2010", "2005", "2000", "2010-2015 증가율"]
index = ["서울", "부산", "인천", "대구"]
df = pd.DataFrame(data, index=index, columns=columns)
df

	지역	2015	2010	2005	2000	2010-2015 증가율
서울	수도권	9904312	9631482	9762546	9853972	0.0283
부산	경상권	3448737	3393191	3512547	3655437	0.0163
인천	수도권	2890451	2632035	2517680	2466338	0.0982
대구	경상권	2466052	2431774	2456016	2473990	0.0141

- 앞에서 데이터프레임은 2차원 배열 데이터를 기반으로 한다고 했지만
- 사실 공통 인덱스를 가지는 열 시리즈를 딕셔너리로 묶어놓은 것이라고 보는 것이 더 정확.
- 2차원 배열 데이터는 모든 원소가 같은 자료형을 가져야 하지만 데이터프레임은 각 열마다 자료형이 다를 수 있기 때문
- 위 예제에서도 지역과 인구와 증가율은 각각 문자열, 정수, 부동소수점 실수이다.

df.values

array([['수도권', 9904312, 9631482, 9762546, 9853972, 0.0283],
       ['경상권', 3448737, 3393191, 3512547, 3655437, 0.0163],
       ['수도권', 2890451, 2632035, 2517680, 2466338, 0.0982],
       ['경상권', 2466052, 2431774, 2456016, 2473990, 0.0141]], dtype=object)
       
df.columns
#결과
Index(['지역', '2015', '2010', '2005', '2000', '2010-2015 증가율'], dtype='object')


# 시리즈에서 처럼 열방향 인덱스와 행방향 인덱스에 이름을 붙이는 거도 가능
df.index.name = "도시"
df.columns.name = "특성"
df

#결과
특성	지역	2015	2010	2005	2000	2010-2015 증가율
도시						
서울	수도권	9904312	9631482	9762546	9853972	0.0283
부산	경상권	3448737	3393191	3512547	3655437	0.0163
인천	수도권	2890451	2632035	2517680	2466338	0.0982
대구	경상권	2466052	2431774	2456016	2473990	0.0141


# 데이터프레임은 전치(transpose)를 포함하여 넘파이 2파원 배열이 가지는 
# 대부분의 속성이나 메서드를 지원한다.

df.T

#결과

        도시	서울	부산	인천	대구
        특성				
지역	수도권	경상권	수도권	경상권
2015	9904312	3448737	2890451	2466052
2010	9631482	3393191	2632035	2431774
2005	9762546	3512547	2517680	2456016
2000	9853972	3655437	2466338	2473990
2010-2015 증가율	0.0283	0.0163	0.0982	0.0141

3. #### 열 데이터의 갱신, 추가, 삭제
- 데이터프레임은 열 시리즈의 딕셔너리으로 볼 수 있으므로
- 열 단위로 데이터를 갱신하거나 추가, 삭제할 수 있다.

 

4. #### 열 인덱싱
- 데이터프레임은 열 라벨을 키로, 열 시리즈를 값으로 가지는 딕셔너리와 비슷
- 따라서 데이터프레임을 인덱싱을 할 때도 열 라벨(columns lable)을 키값으로 생각하여 인덱싱을 할 수 있다.
- 일덱스로 라벨 값을 하나만 넣으면 시리즈 객체가 반환되고 라벨의 배열 또는 리스트를 넣으면 부분적인 데이터프레임이 반환

 

- 데이터프레임의 열 인덱스가 문자열 라벨을 가지고 있는 경우에는 순서를 나타내는 정수 인덱스를 열 인덱싱에 사용할 수 없다.
- 정수 인덱싱 슬라이스를 뒤에서 설명하겠지만 행(row)을 인덱싱할 때 사용하므로 열을 인덱싱할 떄는 쓸 수 없다.
- 정수 인덱스를 넣으면 KeyError 오류가 발생하는 것을 볼 수 있다.

 

5. #### 행 인덱싱
- 만약 행 단위로 인덱싱을 하고자 하면 항상 슬라이싱을 해야한다.
- 인덱스의 값이 문자 라벨이면 라벨 슬라이싱도 가능

 

6. #### 개별 데이터 인덱싱
- 데이터프레임에서 열 라벨로 시리즈를 인덱싱하면 시리즈가 된다.
- 이 시리즈를 다시 행 라벨로 인덱싱하면 개별 데이터가 나온다

'😀 기초 > 판다스(Pandas)' 카테고리의 다른 글

4.3 데이터프레임 고급 인덱싱  (0) 2022.01.30
4.2 데이터 입출력  (0) 2022.01.28
4장 난수 발생과 카운팅(4.0 ~ 4.1_시리즈 클래스)  (0) 2022.01.26
3장 기술 통계(3.4)  (0) 2022.01.25
판다스  (0) 2022.01.18