습관제작소

22-06-21 PYTHON Pandas .2 본문

SMHRD or ITSchool/PYTHON STUDY

22-06-21 PYTHON Pandas .2

KUDO 2022. 6. 22. 17:48
# 판다스 선언하기
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