Python - Pandas 기초 (1)

2 분 소요

pandas - 구조적 데이터 처리를 위한 라이브러리

import numpy as np
import pandas as pd

1. 시리즈 생성

s = pd.Series([1, 3, 5, 6, 8])  #자동으로 인덱스를 할당한다
s
0    1
1    3
2    5
3    6
4    8
dtype: int64

 

s.index
#RangeIndex(start=0, stop=5, step=1) - '0에서부터 5까지 스텝 1씩 증가하는 인덱스다'
RangeIndex(start=0, stop=5, step=1)

 

s.values
array([1, 3, 5, 6, 8], dtype=int64)

 

s2 = pd.Series([1,2,3,'a','b','c'])  #타입이 다른 요소들을 저장. s2의 dtype은 object가 된다.
s2
0    1
1    2
2    3
3    a
4    b
5    c
dtype: object

 

#딕셔너리로 시리즈 생성시 키가 인덱스로 사용됨
s3 = pd.Series({'name':'aaa', 'tel':'111', 'addr':'asdfasd'})
s3
name        aaa
tel         111
addr    asdfasd
dtype: object

 

s4 = pd.Series({'kor':65, 'eng':78, 'math':89})
s4
kor     65
eng     78
math    89
dtype: int64

 

s4['math']
89

 

idx = []  #사용할 인덱스
vals = [] #시리즈로 생성할 값

#학생 이름 리스트
names = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']

for i in range(0, 5): #인덱스와 성적 자동 생성
    s = 'student'+str(i+1)  #인덱스로 사용할 문자열 생성
    idx.append(s)  #생성한 인덱스를 idx에 저장
    
    #한사람의 이름과 성적을 한 리스트에 담음
    val = [names[i], np.random.randint(0, 100, (3))]
    vals.append(val)
    
stu = pd.Series(vals, index = idx)  #인덱스와 리스트를 이요하여 시리즈 생성
stu
student1    [aaa, [92, 58, 85]]
student2    [bbb, [88, 72, 73]]
student3    [ccc, [80, 28, 28]]
student4    [ddd, [94, 52, 94]]
student5     [eee, [64, 44, 3]]
dtype: object

2. DataFrame 생성

*df = pd.DataFrame(data, [,index, columns])

data = [[1,2,3],[4,5,6],[7,8,9]]
d1 = pd.DataFrame(data)
d1
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9

 

my_index = ['row1', 'row2', 'row3']
my_col = ['col1', 'col2', 'col3']
d2 = pd.DataFrame(data, index=my_index, columns=my_col)
d2
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9

 

d2.index
Index(['row1', 'row2', 'row3'], dtype='object')

 

d2.columns
Index(['col1', 'col2', 'col3'], dtype='object')

 

d2.values
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]], dtype=int64)

3. 데이터 연산

a=pd.Series([1,2,3,4])
b=pd.Series([5,6,7,8])
a+b
0     6
1     8
2    10
3    12
dtype: int64

 

a-b
0   -4
1   -4
2   -4
3   -4
dtype: int64

 

a*b
0     5
1    12
2    21
3    32
dtype: int64

 

b/a
0    5.000000
1    3.000000
2    2.333333
3    2.000000
dtype: float64

 

a=pd.Series([1,2,3])
b=pd.Series([5,6,7,8])  #값이 매칭되지 않는경우에는 NaN이 된다
a+b
0     6.0
1     8.0
2    10.0
3     NaN
dtype: float64

 

d1 = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]})
d1
A B C
0 1 4 7
1 2 5 8
2 3 6 9

 

d2 = pd.DataFrame({'A':[11,22], 'B':[33,44], 'C':[55,66]})
d2
A B C
0 11 33 55
1 22 44 66

 

d1+d2
A B C
0 12.0 37.0 62.0
1 24.0 49.0 74.0
2 NaN NaN NaN

 

names = ['aaa', 'bbb', 'ccc']
d = {'국어':[54,65,76], '영어':[67,56,45], '수학':[98,78,76], '사회':[98,76,45], '과학':[89,97,56]}
d3 = pd.DataFrame(d, index=names)
d3
국어 영어 수학 사회 과학
aaa 54 67 98 98 89
bbb 65 56 78 76 97
ccc 76 45 76 45 56

4. 통계함수

  • sum():합
  • mean(): 평균
  • std(): 표준 편차
  • var(): 분산
  • min(): 최소값
  • max(): 최대값
  • cumsum(): 누적합
  • cumprod(): 누적곱
d3.sum()
국어    195
영어    168
수학    252
사회    219
과학    242
dtype: int64

 

d3.mean()  #컬럼별 평균
국어    65.000000
영어    56.000000
수학    84.000000
사회    73.000000
과학    80.666667
dtype: float64

 

d3.mean(axis=1) #행별로 평균
aaa    81.2
bbb    74.4
ccc    59.6
dtype: float64

 

d3.describe()
국어 영어 수학 사회 과학
count 3.0 3.0 3.000000 3.000000 3.000000
mean 65.0 56.0 84.000000 73.000000 80.666667
std 11.0 11.0 12.165525 26.627054 21.733231
min 54.0 45.0 76.000000 45.000000 56.000000
25% 59.5 50.5 77.000000 60.500000 72.500000
50% 65.0 56.0 78.000000 76.000000 89.000000
75% 70.5 61.5 88.000000 87.000000 93.000000
max 76.0 67.0 98.000000 98.000000 97.000000

댓글남기기