습관제작소
22-06-21 PYTHON Pandas .2 본문
# 판다스 선언하기
import pandas as pd
In [10]:
# euc-kr, utf-8 가장 대중적인 인코딩 방법
# cp949 위의 2개가 안되었을때
# index_col 속성 = 원하는 컬럼을 인덱스로 사용 가능
data=pd.read_csv('./data/population_number.csv',
encoding='euc-kr', index_col = '도시')
data
Out[10]:
지역2015201020052000도시서울부산인천대구
수도권 | 9904312 | 9631482.0 | 9762546.0 | 9853972 |
경상권 | 3448737 | NaN | NaN | 3655437 |
수도권 | 2890451 | 2632035.0 | NaN | 2466338 |
경상권 | 2466052 | 2431774.0 | 2456016.0 | 2473990 |
In [12]:
# 정렬
# 인덱스기준 : sort_index()
# 데이터기준 : sort_values()
In [15]:
# 기본값은 오름차순(한글 ㄱㄴㄷ, 영어 abc, 숫자 123)
# ascending = False >> 내림차순 정렬
#data.sort_index()
data.sort_index(ascending = False)
Out[15]:
지역2015201020052000도시인천서울부산대구
수도권 | 2890451 | 2632035.0 | NaN | 2466338 |
수도권 | 9904312 | 9631482.0 | 9762546.0 | 9853972 |
경상권 | 3448737 | NaN | NaN | 3655437 |
경상권 | 2466052 | 2431774.0 | 2456016.0 | 2473990 |
In [20]:
# data.sort_values(by='2000'), data.sort_values('2000') << 가능
#data.sort_values(by='2000',ascending=False)
data.sort_values(by=['지역','2000'],ascending=False)
Out[20]:
지역2015201020052000도시서울인천부산대구
수도권 | 9904312 | 9631482.0 | 9762546.0 | 9853972 |
수도권 | 2890451 | 2632035.0 | NaN | 2466338 |
경상권 | 3448737 | NaN | NaN | 3655437 |
경상권 | 2466052 | 2431774.0 | 2456016.0 | 2473990 |
In [21]:
# 값의 객수를 세주는 함수
# value_count()
data['지역'].value_counts()
Out[21]:
수도권 2
경상권 2
Name: 지역, dtype: int64
In [22]:
#중복제거 하고 값출력
data['지역'].unique()
Out[22]:
array(['수도권', '경상권'], dtype=object)
In [23]:
# null = 결측치 채우는 함수
# fillna(nalue=결측치 채울 값)
#inplace = True : 출력하지 않고 바로 저장해주세요
data.fillna(value = 100, inplace = True)
In [24]:
data
Out[24]:
지역2015201020052000도시서울부산인천대구
수도권 | 9904312 | 9631482.0 | 9762546.0 | 9853972 |
경상권 | 3448737 | 100.0 | 100.0 | 3655437 |
수도권 | 2890451 | 2632035.0 | 100.0 | 2466338 |
경상권 | 2466052 | 2431774.0 | 2456016.0 | 2473990 |
In [28]:
#예제
score=pd.read_csv('./data/score.csv',
encoding='euc-kr', index_col = '과목')
score
Out[28]:
1반2반3반4반과목수학영어국어사회과학
45 | 44 | 73 | 39 |
76 | 92 | 45 | 69 |
47 | 92 | 45 | 69 |
92 | 81 | 85 | 40 |
11 | 79 | 47 | 26 |
In [30]:
# 각 반별로 더하기
score.sum()
Out[30]:
1반 271
2반 388
3반 295
4반 243
dtype: int64
In [32]:
# 학급별 순위
# sum함수는 기본적으로 열 단위로 계산
score.sum().sort_values(ascending=False)
Out[32]:
2반 388
3반 295
1반 271
4반 243
dtype: int64
In [36]:
#행단위계산
score.sum(axis = 1)
Out[36]:
과목
수학 201
영어 282
국어 253
사회 298
과학 163
dtype: int64
In [44]:
# 합계의 컬럼 생성 ( 1반~4반까지만 더하는 범위 만들기)
score['합계']=score.iloc[:,0:4].sum(axis=1)
score
Out[44]:
1반2반3반4반합계과목수학영어국어사회과학
45 | 44 | 73 | 39 | 201 |
76 | 92 | 45 | 69 | 282 |
47 | 92 | 45 | 69 | 253 |
92 | 81 | 85 | 40 | 298 |
11 | 79 | 47 | 26 | 163 |
In [46]:
score["평균"]=score.iloc[:,0:4].mean(axis=1)
score
Out[46]:
1반2반3반4반합계평균과목수학영어국어사회과학
45 | 44 | 73 | 39 | 201 | 50.25 |
76 | 92 | 45 | 69 | 282 | 70.50 |
47 | 92 | 45 | 69 | 253 | 63.25 |
92 | 81 | 85 | 40 | 298 | 74.50 |
11 | 79 | 47 | 26 | 163 | 40.75 |
In [50]:
# 반 평균
score.loc["반평균"]=score.loc[:'과학'].mean()
score
Out[50]:
1반2반3반4반합계평균과목수학영어국어사회과학반평균
45.0 | 44.0 | 73.0 | 39.0 | 201.0 | 50.25 |
76.0 | 92.0 | 45.0 | 69.0 | 282.0 | 70.50 |
47.0 | 92.0 | 45.0 | 69.0 | 253.0 | 63.25 |
92.0 | 81.0 | 85.0 | 40.0 | 298.0 | 74.50 |
11.0 | 79.0 | 47.0 | 26.0 | 163.0 | 40.75 |
54.2 | 77.6 | 59.0 | 48.6 | 239.4 | 59.85 |
In [ ]:
#min() : 최소값
#max() : 최대값
In [51]:
score.min()
Out[51]:
1반 11.00
2반 44.00
3반 45.00
4반 26.00
합계 163.00
평균 40.75
dtype: float64
In [52]:
score.max()
Out[52]:
1반 92.0
2반 92.0
3반 85.0
4반 69.0
합계 298.0
평균 74.5
dtype: float64
In [61]:
# 과목별 최대값과 최소값의 차이
sub_min=score.loc[ : '과학', :'4반'].min(axis=1)
In [62]:
score.loc[ : '과학', :'4반'].max(axis=1)
Out[62]:
과목
수학 73.0
영어 92.0
국어 92.0
사회 92.0
과학 79.0
dtype: float64
In [63]:
sub_max - sub_min
Out[63]:
과목
수학 34.0
영어 47.0
국어 47.0
사회 52.0
과학 68.0
dtype: float64
In [64]:
# apply( 복잡한처리, 행/열 )
# 행이나 열 단위로 복잡한 연산(개발자가 만든 함수)을 처리 할때 사용
Out[64]:
1반2반3반4반합계평균과목수학영어국어사회과학반평균
45.0 | 44.0 | 73.0 | 39.0 | 201.0 | 50.25 |
76.0 | 92.0 | 45.0 | 69.0 | 282.0 | 70.50 |
47.0 | 92.0 | 45.0 | 69.0 | 253.0 | 63.25 |
92.0 | 81.0 | 85.0 | 40.0 | 298.0 | 74.50 |
11.0 | 79.0 | 47.0 | 26.0 | 163.0 | 40.75 |
54.2 | 77.6 | 59.0 | 48.6 | 239.4 | 59.85 |
In [65]:
def max_min(x):
return x.max()-x.min()
In [66]:
score.loc[ :'과학', : '4반'].apply(max_min, axis=1)
Out[66]:
과목
수학 34.0
영어 47.0
국어 47.0
사회 52.0
과학 68.0
dtype: float64
In [67]:
# 데이터를 카테고리로 나누기
# pd.cut(카테고리화 시킬 데이터, 카테고리의 범위, 할당시킬 값)
ages = [0,2,10,21,23,37,31,61,20,41,32,100]
In [68]:
범위=[0,15,25,35,60,99]
할당값 = ['미성년자','청년', '중년', "장년", '노년']
In [69]:
pd.cut(ages, 범위, labels=할당값)
# 0초과 15이하 이기때문에 NaN값이 나온다
Out[69]:
[NaN, '미성년자', '미성년자', '청년', '청년', ..., '노년', '청년', '장년', '중년', NaN]
Length: 12
Categories (5, object): ['미성년자' < '청년' < '중년' < '장년' < '노년']
In [ ]:
#데이터를 합치는(병합) 함수
In [70]:
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
In [77]:
# 데이터프레임 병합
# pd.concat()
pd.concat([df1,df2,df3])
Out[77]:
ABCD01234567891011
A0 | B0 | C0 | D0 |
A1 | B1 | C1 | D1 |
A2 | B2 | C2 | D2 |
A3 | B3 | C3 | D3 |
A4 | B4 | C4 | D4 |
A5 | B5 | C5 | D5 |
A6 | B6 | C6 | D6 |
A7 | B7 | C7 | D7 |
A8 | B8 | C8 | D8 |
A9 | B9 | C9 | D9 |
A10 | B10 | C10 | D10 |
A11 | B11 | C11 | D11 |
In [78]:
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[2, 3, 6, 7])
In [79]:
df4
Out[79]:
BDF2367
B2 | D2 | F2 |
B3 | D3 | F3 |
B6 | D6 | F6 |
B7 | D7 | F7 |
In [81]:
# join = onter : 모든걸 표시
# join = onter : 같은 기준을 가지고 있는 것들만 표시
pd.concat([df1,df4],axis=1, join = 'inner')
Out[81]:
ABCDBDF23
A2 | B2 | C2 | D2 | B2 | D2 | F2 |
A3 | B3 | C3 | D3 | B3 | D3 | F3 |
In [88]:
pd.concat([df1,df4],join = 'inner')
Out[88]:
BD01232367
B0 | D0 |
B1 | D1 |
B2 | D2 |
B3 | D3 |
B2 | D2 |
B3 | D3 |
B6 | D6 |
B7 | D7 |
In [92]:
# ignore_index = True : 데이터를 합치고 인덱스를 초기화
pd.concat([df1,df4],ignore_index = True)
Out[92]:
ABCDF01234567
A0 | B0 | C0 | D0 | NaN |
A1 | B1 | C1 | D1 | NaN |
A2 | B2 | C2 | D2 | NaN |
A3 | B3 | C3 | D3 | NaN |
NaN | B2 | NaN | D2 | F2 |
NaN | B3 | NaN | D3 | F3 |
NaN | B6 | NaN | D6 | F6 |
NaN | B7 | NaN | D7 | F7 |
In [94]:
# reindex(새로운 인덱스값)
pd.concat([df1,df4],axis = 1). reindex(df1.index)
Out[94]:
ABCDBDF0123
A0 | B0 | C0 | D0 | NaN | NaN | NaN |
A1 | B1 | C1 | D1 | NaN | NaN | NaN |
A2 | B2 | C2 | D2 | B2 | D2 | F2 |
A3 | B3 | C3 | D3 | B3 | D3 | F3 |
'SMHRD or ITSchool > PYTHON STUDY' 카테고리의 다른 글
22-06-23 PYTHON matplotib .1 (0) | 2022.06.24 |
---|---|
22-06-23 PYTHON Pandas .3, 예제 (0) | 2022.06.23 |
22-06-21 PYTHON Pandas .1 (0) | 2022.06.22 |
22-06-17 PYTHON Numpy.2 (0) | 2022.06.20 |
22-06-17 PYTHON Numpy.1 (0) | 2022.06.20 |
Comments