🕓
4.8.2. Pandas
목차
Pandas
- 데이터를 분석할 때 가장 많이 쓰이는 라이브러리다.
- 행과 열을 쉽게 처리할 수 있는 함수를 제공하는 도구이다.
입력
출력
Series
- index와 values로 이루어진 1차원 배열이다.
- 명시적 인덱스와 암묵적 인덱스를 가진다.
- loc : 인덱스값을 기반으로 행 데이터를 읽는다.
- iloc : 정수 인덱스을 기반으로 행 데이터를 읽는다.
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
산술연산
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
비교 연산자
입력
출력
입력
출력
입력
출력
집계함수
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
DataFrame
- 2차원 배열에 행과 열에 인덱스를 붙인 것이다.
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
결측값 처리
- NaN
- 배열에서 연산할 경우 오류가 발생하지 않지만 결과값이 NaN이 된다.
- None
3. 처리방법
- isnull() : 결측값 확인 (결측 이면 True , 결측이 아니면 False )
- notnull() : 결측값 확인 (결측 이면 False , 결측이 아니면 True )
- dropna() : 결측값 삭제
- inplace = True : drop후 원본에 반영
- fillna(Num) : 결측값을 Num으로 채워 넣는다.
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
MultiIndex
- Index를 설정할 때 리스트의 리스트 형태로 넣어주면 다중 인덱스가 설정이 된다.
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
데이터 사전 분석
- info() : DataFrame을 구성하는 행과 열에 대한 정보를 나타내 주는 함수
- head(n) : DataFrame의 처음부터 n줄의 행을 출력
- tail(n) : DataFrame의 마지막 n줄의 행을 출력
- describe() : Series, DataFrame의 각 열에 대한 요약 통계
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
값의 연결
- concat : DataFrame끼리 결합
- axis=0 or 1 : 아래로 데이터 연결 / 옆으로 데이터 연결
※ concatenate : 배열끼리 결합
입력
출력
입력
출력
입력
출력
입력
출력
입력
출력
import pandas as pd
pd.__version__
pd? # tab 누르면 사용가능한 여러가지 method를 볼 수 있다.
import pandas as pd
import numpy as np
data = np.arange(0, 50, 10)
data
array([ 0, 10, 20, 30, 40])
a = pd.Series(data, index=['a', 'b', 'c', 'd', 'e'])
print(a)
a 0
b 10
c 20
d 30
e 40
dtype: int32
0 0
1 10
2 20
3 30
4 40
dtype: int32
a 0
b 10
c 20
d 30
e 40
dtype: int32
a 10
b 20
c 30
d 40
e 50
dtype: int32
a -10
b 0
c 10
d 20
e 30
dtype: int32
a 0
b 100
c 200
d 300
e 400
dtype: int32
a 0
b 100
c 400
d 900
e 1600
dtype: int32
a 0.0
b 2.0
c 4.0
d 6.0
e 8.0
dtype: float64
a 0
b 2
c 4
d 6
e 8
dtype: int32
a 0
b 1
c 2
d 0
e 1
dtype: int32
Out[-]
a 0
b 10
c 20
d 30
e 40
dtype: int32
a False
b False
c True
d True
e True
dtype: bool
c 20
d 30
e 40
dtype: int32
a 100
b 101
c 102
d 103
e 104
dtype: int32
a -100
b -90
c -80
d -70
e -60
dtype: int32
a 0
b 1000
c 2000
d 3000
e 4000
dtype: int32
a 0.0
b 0.1
c 0.2
d 0.3
e 0.4
dtype: float64
a 0
b 1
c 2
d 0
e 1
dtype: int32
# 50부터 100사이, 4x3형태로 랜덤 생성
rawData = np.random.randint(50, 100, size=(4, 3))
rawData
array([[72, 61, 98],
[83, 90, 91],
[55, 71, 89],
[71, 71, 76]])
df = pd.DataFrame(rawData,
index=['1반', '2반', '1반', '2반'],
columns=['국', '영', '수'])
df
국 영 수
1반 72 61 98
2반 83 90 91
1반 55 71 89
2반 71 71 76
1반 72
2반 83
1반 55
2반 71
Name: 국, dtype: int32
국 영 수
1반 72 61 98
2반 83 90 91
1반 55 71 89
2반 71 71 76
# 열을 추가하여 평균 구하기
df['평균'] = round((df['국']+df['영']+df['수'])/3, 2)
df
국 영 수 평균
1반 72 61 98 77.00
2반 83 90 91 88.00
1반 55 71 89 71.67
2반 71 71 76 72.67
# 열('na') 추가하고 NaN값을 넣기
df["na"] = np.nan
df
국 영 수 평균 na
1반 72 61 98 77.00 NaN
2반 83 90 91 88.00 NaN
1반 55 71 89 71.67 NaN
2반 71 71 76 72.67 NaN
국 영 수 평균
1반 72 61 98 77.00
2반 83 90 91 88.00
1반 55 71 89 71.67
2반 71 71 76 72.67
국 영 수 평균
1반 72 61 98 77.0
2반 83 90 91 88.0
df = df.drop(["평균"], axis = 'columns')
df
국 영 수
1반 72 61 98
2반 83 90 91
1반 55 71 89
2반 71 71 76
df = df.astype('float64') # 타입 변경
df
국 영 수
1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
1반 55.0 71.0 89.0
2반 71.0 71.0 76.0
국 영 수
1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
df.dropna(axis=0) # inplace=True # axis=0 : 행 삭제
국 영 수
1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
2반 71.0 71.0 76.0
국 영 수
1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
df.dropna(axis=1) # axis=1 : 열 삭제
국 영
1반 72.0 61.0
2반 83.0 90.0
1반 55.0 71.0
2반 71.0 71.0
국 영 수
1반 72.0 61.0 98
2반 83.0 90.0 91
1반 55.0 71.0 hello
2반 71.0 71.0 76
국 영 수
1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
1반 55.0 71.0 0.0
2반 71.0 71.0 76.0
df.fillna(df.mean()) # 평균으로 대체
국 영 수
1반 72.0 61.0 98.000000
2반 83.0 90.0 91.000000
1반 55.0 71.0 88.333333
2반 71.0 71.0 76.000000
국 영 수
1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
# index 와 columns을 바꿈
df.T
1반 2반 1반 2반
국 72.0 83.0 55.0 71.0
영 61.0 90.0 71.0 71.0
수 98.0 91.0 NaN 76.0
국 영 수
1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
df.index = [['1학년', '1학년', '2학년', '2학년'], ['1반', '2반', '1반', '2반']]
df
국 영 수
1학년 1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
2학년 1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
df.columns = [['언어', '언어', '수리'],['국', '영', '수']]
df
언어 수리
국 영 수
1학년 1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
2학년 1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
1학년 1반 72.0
2반 83.0
2학년 1반 55.0
2반 71.0
Name: 국, dtype: float64
언어 국 72.0
영 61.0
수리 수 98.0
Name: (1학년, 1반), dtype: float64
언어 수리
국 영 수
1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
언어 국 72.0
영 61.0
수리 수 98.0
Name: 1반, dtype: float64
언어 수리
국 영 수
1학년 1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
2학년 1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 4 entries, (1학년, 1반) to (2학년, 2반)
Data columns (total 3 columns):
(언어, 국) 4 non-null float64
(언어, 영) 4 non-null float64
(수리, 수) 3 non-null float64
dtypes: float64(3)
memory usage: 248.0+ bytes
언어 수리
국 영 수
1학년 1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
2학년 1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
언어 수리
국 영 수
1학년 1반 72.0 61.0 98.0
2반 83.0 90.0 91.0
2학년 1반 55.0 71.0 NaN
2반 71.0 71.0 76.0
언어 국 float64
영 float64
수리 수 float64
dtype: object
언어 수리
국 영 수
count 4.000000 4.000000 3.000000
mean 70.250000 73.250000 88.333333
std 11.528949 12.120919 11.239810
min 55.000000 61.000000 76.000000
25% 67.000000 68.500000 83.500000
50% 71.500000 71.000000 91.000000
75% 74.750000 75.750000 94.500000
max 83.000000 90.000000 98.000000
df.isnull() # 결측값 확인, 결과는 bool 형태로 출력
언어 수리
국 영 수
1학년 1반 False False False
2반 False False False
2학년 1반 False False True
2반 False False False
df.isnull().sum() # 결측값 개수 확인
언어 국 0
영 0
수리 수 1
dtype: int64
a = pd.DataFrame(np.arange(1, 10).reshape(3, 3))
a
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
b = pd.Series(np.arange(10, 40, 10))
b
0 10
1 20
2 30
dtype: int32
pd.concat([a, b], axis=1)
0 1 2 0
0 1 2 3 10
1 4 5 6 20
2 7 8 9 30
pd.concat([a, b], axis=1, ignore_index=True)
0 1 2 3
0 1 2 3 10
1 4 5 6 20
2 7 8 9 30
a.append(b, ignore_index=True)
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
3 10 20 30