Python

[Python] Pandas 사용

챈박 2021. 7. 28. 19:25

데이터 분석을 위해 파이썬에서는 Pandas와 Numpy 그리고 Matplotlib를 제공한다. 이 글에서는 pandas의 함수사용법에 대해 알아보겠다. pandas는 파이썬의 데이터 처리를 위한 라이브러리이다.

 

 

pandas를 사용하기 위해서는 pandas모듈을 import를 해야한다. 보통 pd라는 별칭으로 사용한다.

import pandas as pd
import numpy as np

 

Series() - 시리즈는 1차원 배열의 값(values)에 각 값에 대응되는 인덱스(index)를 부여할 수 있는 구조를 갖는다

s5 = pd.Series({'국어':100, '영어':95, '수학':90})
s5
->
국어    100
영어     95
수학     90
dtype: int64
index_date = ['2018-10-07', '2018-10-08', '2018-10-09', '2018-10-10']
s4 = pd.Series([200, 195, np.nan, 205], index = index_date)
s4

->
2018-10-07    200.0
2018-10-08    195.0
2018-10-09      NaN
2018-10-10    205.0
dtype: float64

 

date_range() - 날짜 범위 만들기

(freq='D'로 선언하면 day를 기준으로 날짜를 나누겠다는 뜻 -> periods=5로 선언되어 있으므로 시작날짜 2021-02-01부터 5일을 부여하겠다는 의미 / freq는 생략 가능한데 생략할 시 default 값은 'D'(day))

index_date = pd.date_range(start = '2021-02-01', periods = 5, freq='D')
pd.Series([51,62,55,49,58], index = index_date)

->
2021-02-01    51
2021-02-02    62
2021-02-03    55
2021-02-04    49
2021-02-05    58
Freq: D, dtype: int64

 

 

DataFrame() - 2차원 데이터 테이블 구조를 가지는 자료형.

데이터프레임은 2차원 리스트를 매개변수로 전달한다. 2차원이므로 행방향 인덱스(index)와 열방향 인덱스(column)가 존재한다. 즉, 행과 열을 가지는 자료구조이다. 시리즈가 인덱스(index)와 값(values)으로 구성된다면, 데이터프레임은 열(columns)까지 추가되어 열(columns), 인덱스(index), 값(values)으로 구성된다.

data = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
index_date = pd.date_range('2019-09-01', periods=4)
columns_list = ['A', 'B', 'C']
pd.DataFrame(data, index=index_date, columns=columns_list)

->
		A	B	C
2019-09-01	1	2	3
2019-09-02	4	5	6
2019-09-03	7	8	9
2019-09-04	10	11	12
table_data3 = {'봄': [256.5,264.3,215.9,223.2,312.8],
              '여름': [770.6,567.5,599.8,387.1,446.2],
              '가을': [363.5,231.2,293.1,247.7,381.6],
              '겨울': [139.3,59.9,76.9,109.1,108.1]}
columns_list = ['봄', '여름', '가을', '겨울']
index_list = ['2012', '2013', '2014', '2015', '2016']

df3 = pd.DataFrame(table_data3, columns = columns_list, index = index_list)
df3

->
	봄	여름	가을	겨울
2012	256.5	770.6	363.5	139.3
2013	264.3	567.5	231.2	59.9
2014	215.9	599.8	293.1	76.9
2015	223.2	387.1	247.7	109.1
2016	312.8	446.2	381.6	108.1

 

 

mean() - 평균 구하기 (axis=1 이면, 행 기준)

df3.mean()
->
봄     254.54
여름    554.24
가을    303.42
겨울     98.66
dtype: float64
df3.mean(axis=1)
->
2012    382.475
2013    280.725
2014    296.425
2015    241.775
2016    312.175
dtype: float64

 

describe() - 데이터 요약

df3.describe()
->
	봄		여름		가을		겨울
count	5.000000	5.000000	5.000000	5.000000
mean	254.540000	554.240000	303.420000	98.660000
std	38.628267	148.888895	67.358496	30.925523
min	215.900000	387.100000	231.200000	59.900000
25%	223.200000	446.200000	247.700000	76.900000
50%	256.500000	567.500000	293.100000	108.100000
75%	264.300000	599.800000	363.500000	109.100000
max	312.800000	770.600000	381.600000	139.300000

 

 

 

 

 

 

데이터 조회

KTX_data = {'경부선 KTX': [39060,39896,42005,43621,41702,41266,32427],
            '호남선 KTX': [7313,6967,6873,6626,8675,10622,9228],
            '경전선 KTX': [3627,4168,4088,4424,4606,4984,5570],
            '전라선 KTX': [309,1771,1954,2244,3146,3945,5766],
            '동해선 KTX': [np.nan,np.nan,np.nan,np.nan,2395,3786,6667]}
col_list = ['경부선 KTX', '호남선 KTX', '경전선 KTX', '전라선 KTX', '동해선 KTX']
index_list = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']

df_KTX = pd.DataFrame(KTX_data, columns = col_list, index = index_list)
df_KTX

 

 

행 기준 indexing

df_KTX[1:2]

 

 

index 또는 column 명으로 조회

df_KTX.loc['2013':'2016']

 

df_KTX['경부선 KTX']['2012':'2014']

->
2012    39896
2013    42005
2014    43621
Name: 경부선 KTX, dtype: int64

 

.T - 행과 열 바꾸기

df_KTX.T # T -> 행과 열 바꾸기

 

 

append() - 테이블 붙이기

(ignore_index=True 일 경우 붙임 당하는 테이블의 index를 이어서 적용한다 (속성 생략 가능))

df1 = pd.DataFrame({'Class1':[95,92,98,100],
                    'Class2':[91,93,97,99]})
df1

->
	Class1	Class2
0	95	91
1	92	93
2	98	97
3	100	99
df2 = pd.DataFrame({'Class1': [87,89],
                   'Class2': [85,90]})
df2

->
	Class1	Class2
0	87	85
1	89	90
df1.append(df2, ignore_index=True)

->
	Class1	Class2
0	95	91
1	92	93
2	98	97
3	100	99
4	87	85
5	89	90

 

 

 

 

join() - 테이블 합치기

index_label = ['a','b','c','d']
df1a = pd.DataFrame({'Class1':[95,92,98,100],
                    'Class2':[91,93,97,99]}, index=index_label)
df5 = pd.DataFrame({'Class4':[82,92]})
df1.join(df5)

->
	Class1	Class2	Class4
0	95	91	82.0
1	92	93	92.0
2	98	97	NaN
3	100	99	NaN

 

 

merge() - 테이블 결합

df_left = pd.DataFrame({'key':['A','B','C'], 'left':[1,2,3]})
df_left

->
	key	left
0	A	1
1	B	2
2	C	3
df_right = pd.DataFrame({'key':['A','B','D'], 'right':[4,5,6]})
df_right

->
	key	right
0	A	4
1	B	5
2	D	6

 

#df_left를 기준(how='left')(df_left가 merge왼쪽에 있으므로)을 두고 on='key'에서 속성 값인 key(컬럼)를 비교하여 key(컬럼)가 일치하거나 left의 key만 있는경우 결합

df_left.merge(df_right, how='left', on='key') 

->
	key	left	right
0	A	1	4.0
1	B	2	5.0
2	C	3	NaN

 

#df_right를 기준(how='right')(df_right가 merge오른쪽에 있으므로)을 두고 on='key'에서 속성 값인 key(컬럼)를 비교하여 key(컬럼)가 일치하거나 right의 key만 있는경우 결합

df_left.merge(df_right, how='right', on='key') 

->
	key	left	right
0	A	1.0	4
1	B	2.0	5
2	D	NaN	6

 

df_left.merge(df_right, how='outer', on='key') 

->
	key	left	right
0	A	1.0	4.0
1	B	2.0	5.0
2	C	3.0	NaN
3	D	NaN	6.0
df_left.merge(df_right, how='inner', on='key')

->
	key	left	right
0	A	1	4
1	B	2	5

 

 

pandas.html
0.66MB

 

 

 

반응형