Untitled2
In [82]:
from IPython.core.display import display, HTML
display(HTML("<style> .container{width:90% !important;}</style>"))

Pandas 리뷰

In [1]:
import pandas as pd
import numpy as np
from pandas import Series, DataFrame
# 기본 라이브러리 임포트, 제일 아래 Series나 DataFrame은 어차피 pd에 있기에
# pd.Series로 써도 되나 아래처럼 부르면 Series로 바로 부를 수가 있다.
In [84]:
movie = pd.read_csv('movie.csv')
# csv를 읽어들인다, 안에 다른 매개 인자가 많지만 아직 그 정도 레벨은 아님..
In [83]:
movie.head(5)
# head는 기본 5개를 보여줌. 안에 숫자쓰면 숫자만큼 보여줌.
Out[83]:
구분 요일 지역-시도 지역-시군구 지역-읍면동 성별 연령대 이용_비율(%)
0 영화관 2018 4 1 강원도 강릉시 금학동 10대 0.00018
1 영화관 2018 4 1 강원도 강릉시 금학동 30대 0.00143
2 영화관 2018 4 1 강원도 강릉시 금학동 20대 0.00161
3 영화관 2018 4 1 강원도 속초시 조양동 10대 0.00099
4 영화관 2018 4 1 강원도 속초시 조양동 20대 0.00457
In [7]:
df = movie.copy() # 원본은 놔두고 카피
In [12]:
df.index = movie['지역-시군구'] # 카피한 복사본에 index를 추가함. index는 원본의 지역-시군구
df.head()
Out[12]:
구분 요일 지역-시도 지역-시군구 지역-읍면동 성별 연령대 이용_비율(%)
지역-시군구
강릉시 영화관 2018 4 1 강원도 강릉시 금학동 10대 0.00018
강릉시 영화관 2018 4 1 강원도 강릉시 금학동 30대 0.00143
강릉시 영화관 2018 4 1 강원도 강릉시 금학동 20대 0.00161
속초시 영화관 2018 4 1 강원도 속초시 조양동 10대 0.00099
속초시 영화관 2018 4 1 강원도 속초시 조양동 20대 0.00457
In [16]:
# 시리즈로 다시 회귀.. 시리즈가 모이면 데이터 프레임
kk =pd.Series([100,200,300], index = ['a','b','c'])
ko =pd.Series([10,20,30], index = ['a','b','c'])
In [15]:
for k, v in kk.items():
    print (k, v)
a 100
b 200
c 300
In [20]:
dfd = df[:10]
dfd
Out[20]:
구분 요일 지역-시도 지역-시군구 지역-읍면동 성별 연령대 이용_비율(%)
지역-시군구
강릉시 영화관 2018 4 1 강원도 강릉시 금학동 10대 0.00018
강릉시 영화관 2018 4 1 강원도 강릉시 금학동 30대 0.00143
강릉시 영화관 2018 4 1 강원도 강릉시 금학동 20대 0.00161
속초시 영화관 2018 4 1 강원도 속초시 조양동 10대 0.00099
속초시 영화관 2018 4 1 강원도 속초시 조양동 20대 0.00457
속초시 영화관 2018 4 1 강원도 속초시 조양동 30대 0.00152
속초시 영화관 2018 4 1 강원도 속초시 조양동 10대 0.00215
속초시 영화관 2018 4 1 강원도 속초시 조양동 30대 0.00269
원주시 영화관 2018 4 1 강원도 원주시 단계동 40대 0.00287
원주시 영화관 2018 4 1 강원도 원주시 단계동 50대 0.00027
In [21]:
dfd[['구분']] # dfd['구분']과 다른 점은 대괄호 두개는 데이터 프레임 형식을 그대로 유지함.
Out[21]:
구분
지역-시군구
강릉시 영화관
강릉시 영화관
강릉시 영화관
속초시 영화관
속초시 영화관
속초시 영화관
속초시 영화관
속초시 영화관
원주시 영화관
원주시 영화관
In [22]:
dfd['구분']
Out[22]:
지역-시군구
강릉시    영화관
강릉시    영화관
강릉시    영화관
속초시    영화관
속초시    영화관
속초시    영화관
속초시    영화관
속초시    영화관
원주시    영화관
원주시    영화관
Name: 구분, dtype: object
In [30]:
df2 = pd.DataFrame(np.arange(12).reshape(4,3))
print(df2[0][1])
print(df2[1][3]) #[칼람][로우] 순이네
3
10
In [28]:
df2
Out[28]:
0 1 2
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
In [32]:
data = {
    "kor":[80,90,70,30],
    "eng":[90,70,60,40],
    "mat":[90,60,80,70]
};
columns = ['kor', 'eng', 'mat']
index = ['kim', 'lee', 'jin', 'dae']
df = pd.DataFrame(data, index = index, columns = columns)
In [33]:
df
Out[33]:
kor eng mat
kim 80 90 90
lee 90 70 60
jin 70 60 80
dae 30 40 70
In [35]:
df['mat'].T
Out[35]:
kim    90
lee    60
jin    80
dae    70
Name: mat, dtype: int64
In [36]:
df[['kor', 'eng']]
Out[36]:
kor eng
kim 80 90
lee 90 70
jin 70 60
dae 30 40
In [37]:
df['kor_avg'] = sum(df['kor']) / 4
In [86]:
sum(df['kor'])
Out[86]:
270
In [87]:
df['kor'].sum
Out[87]:
<bound method Series.sum of kim    80
lee    90
jin    70
dae    30
Name: kor, dtype: int64>

Row 끼리 더하기

  • 칼럼끼리 더하는 것은 쉬움(생각보단)
  • Row 순으로 더하는 방법을 고민하다가 아래처럼 사용.
  • sum()과 df[].sum은 전혀 다르다.
    • 전자의 경우는 칼럼을 인덱싱 한 후에 모두 더하는 거고, 후자는 로우별 인덱싱 한 후에 더한다
In [88]:
df['sum'] = df[df.columns[:3]].sum(axis = 1)
#df.columns를 하면 여러개가 순서대로 나오는대 그 중에서 0,1,2번까지만 사용해서 
df
Out[88]:
kor eng mat kor_avg sum
kim 80 90 90 67.5 260
lee 90 70 60 67.5 220
jin 70 60 80 67.5 210
dae 30 40 70 67.5 140
In [80]:
df.loc['kim', :]
Out[80]:
kor         80.0
eng         90.0
mat         90.0
kor_avg     67.5
sum        260.0
Name: kim, dtype: float64
In [ ]:
# 모든 학생의 수학점수를 시리즈로 나타낸다.
# 모든 학새으이 국어와 영어점수를 데이터 프레임으로 나타낸다
# 모든 학새으이 각 과목 평균 점수를 새로운 열로 추가한다
# dae의영어 점수를 80점으로 수정하고 평균 점수도 다시 계산한다
# kim의 점수를 데이터 프레임으로 나타낸다
# jin의 점수를 시리즈로 나타낸다.

+ Recent posts