TECH_LOG

Python Library_Pandas3 [ DataFrame ] 본문

Programming

Python Library_Pandas3 [ DataFrame ]

HongDaang 2023. 3. 23. 12:44

ABC부트캠프_2023.03.23

 

DataFrame

표 같은 스프레드시트 형식의 자료구조

- 각 컬럼은 다른 종류의 값을 담을 수 있음
  1. 우선 하나의 열이 되는 데이터를 리스트나 일차원 배열을 준비한다.
  2. 이 각각의 열에 대한 이름(라벨)을 키로 가지는 딕셔너리를 만든다.
  3. 이 데이터를 DataFrame 클래스 생성자에 넣는다. 동시에 열방향 인덱스는 columns 인수로, 행방향 인덱스는 index 인수로 지정한다.

 

 

- 데이터 프레임 생성

import pandas as pd
from pandas import Series, DataFrame
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
df.values      # 1차원 배열로 구성 되었던 값들 출력
>>>
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
>>>
Index(['서울', '부산', '인천', '대구'], 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

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
#"2010-2015 증가율" 이라는 이름의 열 추가
df["2010-2015 증가율"] = df["2010-2015 증가율"] * 100
df
>>>
특성	지역	2015	2010	2005	2000	2010-2015 증가율
이름						
서울	수도권	9904312	9631482	9762546	9853972	2.83
부산	경상권	3448737	3393191	3512547	3655437	1.63
인천	수도권	2890451	2632035	2517680	2466338	9.82
대구	경상권	2466052	2431774	2456016	2473990	1.41


# "2005-2010 증가율" 이라는 이름의 열 추가
df["2005-2010 증가율"] = ((df["2010"] - df["2005"]) / df["2005"] * 100).round(2)
df

# (2010년 값 - 2005년 값) 을 2005년 값으로 나누어준 후 x100 , 소숫점 두자리까지
>>>
특성	지역	2015	2010	2005	2000	2010-2015 증가율	2005-2010 증가율
이름							
서울	수도권	9904312	9631482	9762546	9853972	2.83	-1.34
부산	경상권	3448737	3393191	3512547	3655437	1.63	-3.40
인천	수도권	2890451	2632035	2517680	2466338	9.82	4.54
대구	경상권	2466052	2431774	2456016	2473990	1.41	-0.99
​
#"2010-2015 증가율" 이라는 이름의 열 삭제
del df["2010-2015 증가율"]
df
>>>
특성	지역	2015	2010	2005	2000	2005-2010 증가율
이름						
서울	수도권	9904312	9631482	9762546	9853972	-1.34
부산	경상권	3448737	3393191	3512547	3655437	-3.40
인천	수도권	2890451	2632035	2517680	2466338	4.54
대구	경상권	2466052	2431774	2456016	2473990	-0.99

 

- 열 인덱싱

df["지역"]
>>>
도시
서울    수도권
부산    경상권
인천    수도권
대구    경상권

df[["2010", "2015"]]
>>>

특성	2010	2015
도시		
서울	9631482	9904312
부산	3393191	3448737
인천	2632035	2890451
대구	2431774	2466052

df[["2010"]] #데이터프레임 자료형 유지
>>>
특성	2010
도시	
서울	9631482
부산	3393191
인천	2632035
대구	2431774

type(df[["2010"]])
>>> pandas.core.frame.DataFrame
type(df["2010"])
>>>pandas.core.series.Series
import numpy as np

df2 = pd.DataFrame(np.arange(12).reshape(3,4))
df2
>>>
	0	1	2	3
0	0	1	2	3
1	4	5	6	7
2	8	9	10	11

df2[2]
>>>
0     2
1     6
2    10

df2[[2,3]]  # colum을 기준으로 2,3을 추출
               # colum은 인덱스로 추출
               # 행은 슬라이싱으로 추출
>>>
    2	3
0	2	3
1	6	7
2	10	11

- 행 인덱싱

  • 행 단위로 인덱싱을 하고자 하면 항상 슬라이싱 해야 함.
df2[1:3]      #행의 1인덱스 부터 2인덱스 까지 슬라이싱
>>>

    0	1	2	3
1	4	5	6	7
2	8	9	10	11


df[:1]
>>>
특성	지역	2015	2010	2005	2000	2005-2010 증가율
이름						
서울	수도권	9904312	9631482	9762546	9853972	-1.34

 

 

-- 예제

 

Comments