본문 바로가기

수업정리/python

pandas 정리

 

https://colab.research.google.com/drive/11Ji6e5ymscQ_qdgSW94qNhGGFSErTWVF

 

Pandas.ipynb

Colaboratory notebook

colab.research.google.com

1. pandas 개요

 

2. pandas 모듈 사용하기

import pandas as pd

 

3. Series 사용, 기본적인 생성 방법

- 시리즈 생성하기

s1 = pd.Series([4,7,-5,3])
s1

- 인덱스 지정하여 생성

s1 = pd.Series([4,7,-5,3], index=['d','b','a','c'])
s1

- 딕셔너리 객체로 Series 생성

dic1 = {'a':4, 'b':7, 'c':-5, 'd':3}
s3 = pd.Series(dic1)
s3

- 인덱스 라벨 변경하기

s3.index =['e','f','g','h']
s3

 

4. Series 정보 확인

s3.values

s3.index

s3.dtype

s3.values # array([ 4,  7, -5,  3])
s3.index  # Index(['a', 'b', 'c', 'd'], dtype='object')
s3.dtype  # dtype('int64')

 

5. Series에 이름 지정

시리즈.name

city.name = '인구'
city
"""
서울    9904312
부산    3448737
인천    2890451
대구    2466052
Name: 인구, dtype: int64
"""

 

6. Series 색인

1. 인덱싱,

2. 슬리이싱

3. boolean색인

s2015['부산'] #3448737
s2015[[1]]    #부산    3448737	Name: 인구, dtype: int64
s2015[[1,3,0,1]]
"""
부산    3448737
대구    2466052
서울    9904312
부산    3448737
Name: 도시, dtype: int64
"""

# boolean 색인
b = [True, True, False, True]
s2015[b]
"""
서울    9904312
부산    3448737
대구    2466052
Name: 도시, dtype: int64
"""

s15_10.isnull() # null 값 판별
s15_10.notnull() # notnull 값 판별

 

7. 데이터프레임

1) 딕셔너리 이용해서 생성하기 : df = pd.DataFrame(딕셔너리)

2) 리스트를 이용해서 생성하기

# df2.index = ind
# df2.columns = col

li1 = [[9904312, 3448737, 2890451, 2466052],[9631482, 3393191, 2632035, 2431774]]
df2 = pd.DataFrame(li1)
ind = ['2015', '2010']
col = ['서울','부산','인천','대구']
df2 = pd.DataFrame(li1, index= ind, columns= col)
df2

 

8. 데이터프레임 행, 열 변환

df2.T
df2.transpose()

 

9. 데이터프레임 정보 확인

1) df1.values     : 값 확인

2) df1.index       : 인덱스 확인

3) df1.columns  : 컬럼 확인

4) df1.shape      : 모양 확인

5) df1.ndim        : 차원 확인

6) df1.size          : 값의 총 갯수 확인

7) df1.head(3)    : 위 3개 행만 출력

 

10. 데이터프레임 컬럼 추가

데이터프레임['컬럼명'] = [값1,값2,값3,값4]

 

11. 데이터프레임 색인

  1) 인덱싱 : 열(컬럼) 인덱싱   : df['컬럼']
  2) 슬라이싱 : 행 슬라이싱     : df['컬럼1','컬럼2','컬럼3']]
  3) boolean 색인 : 행 색인      : 
  4) 인덱서 활용

 

12. csv 불러오기

pd.read_csv('csv파일.csv')

pd.read_csv('population_number.csv')
pd.read_csv('population_number.csv', index_col = '도시') # 인덱스 컬럼 지정

 

13. value_counts(), sort_index()

value_count : 결측치 빼고 갯수 세어줌

sort_index    : 정렬

# 각각의 값이 나온 횟수를 세어주는 기능
# 결측치는 제외하고 값들의 갯수를 세어준다
pd.read_csv('population_number.csv', index_col = '도시')['2015'].value_counts()


# 정렬(sort)
# sort_index : 인덱스 값을 기준으로 정렬
# sort_values : 데이터 값을 기준으로 정렬
pd.read_csv('population_number.csv', index_col = '도시').sort_index()
# 내림차순으로 변경 : ascending = False
pd.read_csv('population_number.csv', index_col = '도시').sort_index(ascending = False)

# 2010년 기준으로 정렬 (by = '2010')
# by = 컬럼값
# 컬럼값의 데이터를 통해 정렬
# 여러 기준을 통해 정렬 가능
pd.read_csv('population_number.csv', index_col = '도시').sort_values(by='2010')
# '지역', '2010'을 통해 정렬 => 리스트 넣으면 됨
pd.read_csv('population_number.csv', index_col = '도시').sort_values(by=['지역','2010'])

 

14. 행추가

정석)

score.loc['반평균'] = score.mean(axis=1)

야매)

a = score.T
a['반평균'] = a.mean(axis=1)
score = a.T
score

 

15. apply

행 혹은 열 단위로 더 복잡한 처리를 할 때 사용

함수 지정 => 원하는 연산과 결과값

def max_min(x): return x.max()-x.min()
score.loc[:'Web', '1반':'4반'].apply(max_min, axis=1)

 

16. cut

카테고리 생성하기 (히스토그램 데이터)

# 구간 => 초과~이하
ages = [0,2,10,21,23,36,38,39,42,45,47,53,54,61,64,26,27,99,100,85,87]
bins = [0,15,25,35,60,99] # 구간 6
labels = ['미성년자','청년','중년','장년','노년'] # 구간의 이름

cats = pd.cut (ages, bins, labels=labels)
cats
"""
[NaN, '미성년자', '미성년자', '청년', '청년', ..., '중년', '노년', NaN, '노년', '노년']
Length: 21
Categories (5, object): ['미성년자' < '청년' < '중년' < '장년' < '노년']
"""

 

17. 데이터프레임 병합

1) concat : DataFrame간 병합

 1-1) ignore_index : 기존인덱스를 무시하고 새로운 인덱스를 부여

 1-2) axis= 1          : 행 (인덱스 라벨)을 기준으로 병합

 1-3) join = 'outer'  : 아우터조인

 1-4) join = 'inner'  : 이너조인

# DataFrame간 병합
resultDf1 = pd.concat([df1,df2,df3])
resultDf1

# 기존인덱스를 무시하고 새로운 인덱스를 부여 (필수인듯)
resultDf2 = pd.concat([df1,df2,df3], ignore_index=True)
resultDf2

# 행 (인덱스 라벨)을 기준으로 병합
# 기본적으로 outer join 되어있음
resultDf3 = pd.concat([df1,df2,df3], axis=1)
resultDf3

# 이너조인
resultDf4 = pd.concat([df1,df2,df3], axis=1, join='inner')
resultDf4

# Series 클래스 병합 가능
# axis 1로 주면 유용하게 활용!
resultDf5 = pd.concat([sr1,sr2,sr3], axis=1)
resultDf5

 

2) merge

2-1) how  '조인속성'

2-2) on = '어떤 컬럼을 기준으로 병합?'

dic1 = {'key' : ['K0','K1','K2','K3'], 'A' : ['A0','A1','A2','A3'], 'B' : ['B0','B1','B2','B3']}
dic2 = {'key' : ['K0','K1','K2','K4'], 'C' : ['C0','C1','C2','C3'], 'D' : ['D0','D1','D2','D3']}

df4 = pd.DataFrame(dic1)
df5 = pd.DataFrame(dic2)

# how = 'outer'
resultDf7 = pd.merge(df4, df5, on = 'key', how='outer')
resultDf7

 

18. 행/열 삭제

1) df.drop(인덱스) : 인덱스 삭제, 커밋X

2) df.drop(인덱스, inplace=True) : 인덱스 삭제, 커밋O

3) df.drop(컬럼, axis=1)

# 1번 인덱스 삭제, 커밋X
resultDf7.drop(1)

# 1번 인덱스 삭제, 커밋O, 원본데이터에 반영 : inplace =True
resultDf7.drop(2, inplace=True)

# 컬럼 삭제 : axis=1 추가
resultDf7.drop('B', axis=1)

 

'수업정리 > python' 카테고리의 다른 글

matplotlib 정리  (2) 2023.08.23
numpy 정리  (0) 2023.08.23