Pandas
- 행과 열 형태로 되어있는 data를 다루는 library
- 종류
- Series : 1차원
- DataFrame : 2차원
- Series Class : 1차원 → 인덱스(index) + 값(value)
- DataFrame Class : 2차원 → 표와 같은 형태
- 차원의 개념
- Vector : 1차원 데이터
- Matrix : 2차원 데이터
- Tensor : 3차원 이상의 데이터
1. Series
- Series data는 1차원 data
- Seires data는 다양한 type의 data를 저장할 수 있다.
srs3 = pd.Series(["홍길동",20,True], index=["이름","나이","성별"])
# result
이름 홍길동
나이 20
성별 True
dtype: object
- 타입이 object로 바뀌어버린다 왜? 모든 타입의 최상위 클래스이다. 즉, 모든 타입을 담기 위해서이다.
- Series data에는 list, tuple, dictionary, np.배열등 나열형 data들도 들어갈 수 있다.
srs5 = pd.Series(np.array([10,20,30]))
# result
0 10
1 20
2 30
dtype: int32
1) Series data 생성
(1) index 미지정
srs = pd.Series([4,7,-5,3])
#result
0 4
1 7
2 -5
3 3
dtype: int64
(2) index 지정
srs2 = pd.Series([4,7,-5,3], index=['a','b','c','d'])
#result
a 4
b 7
c -5
d 3
dtype: int64
(2-1) index 지정 (dictionary)
srs4 = pd.Series({"이름":"홍길동","나이":20,"성별":"남성"})
# result
이름 홍길동
나이 20
성별 남성
dtype: object
(3) Series datad의 이름과 index 이름 지정
s6 = pd.Series([9904312,3448737,2890451,2466052],index=["서울","부산","인천","대구"])
s6.name = "2015 인구"
s6.index.name = "도시"
# result
도시
서울 9904312
부산 3448737
인천 2890451
대구 2466052
Name: 2015 인구, dtype: int64
(4) dictionary 객체로 series data 생성
data = {"서울":9631482,"부산":3393191,"인천":2632035,"대전":1490158}
s7 = pd.Series(data)
s7.name = "2010 인구수"
(5) list를 이용한 series data 생성
s8 = pd.Series([9904312, 3448737, 2890451, 2466052],
index=["서울", "부산", "인천", "대구"])
s8.name = "2015 인구수"
2) Series data 연산 및 확인 함수
(1) index
- series 인덱스 확인 : srs.index
(2) values
(3) dtype
(4) 연산
s6/1_000_000
# result
도시
서울 9.904312
부산 3.448737
인천 2.890451
대구 2.466052
Name: 인구, dtype: float64
3) Series data indexing
(1) indexing
- 시리즈 데이터의 인덱싱
- 숫자로 자동 부여되는 인덱스 번호를 사용할 수 있다.
- index로 부여된 index 이름도 사용할 수 있다.
- 다중 인덱싱 가능 -> 콤마로 구분
s6[[0,3,1]],s6[["서울","대구","부산"]]
# result
(도시
서울 9904312
대구 2466052
부산 3448737
Name: 인구, dtype: int64,
도시
서울 9904312
대구 2466052
부산 3448737
Name: 인구, dtype: int64)
같은 query이다.
(2) boolean indexing
- 논리연산자인 and, or 이런 key word는 먹지 않는다. 비트연산자(&, |)로 지정하여 해줘야한다.
s6>=2_500_000
#result
도시
서울 True
부산 True
인천 True
대구 False
Name: 인구, dtype: bool
s6[(s6>=2_500_000) & (s6<=5_000_000)]
#result
도시
부산 3448737
인천 2890451
Name: 인구, dtype: int64
- notnull()
- 결측치가 아닌 data만 출력 -> notnull() 결측치가 없는지 여부
ds = s8-s7
ds[ds.notnull()]
부산 55546.0
서울 272830.0
인천 258416.0
dtype: float64
- isnull()
- 결측치인 데이터만 출력 -> isnull() - 결측치가 있는지 여부 // 약간 numpy의 isnan() 포지션
ds[ds.isnull()]
대구 NaN
대전 NaN
dtype: float64
4) Series data slicing
- Series 슬라이싱
- indexing은 마지막 수를 포함하지 않지만
- key로 찾는다면 마지막 key값을 포함한다.
5) Series data 갱신, 추가, 삭제
- Series 데이터 갱신, 추가, 삭제
- 시리즈명["인덱스명"] = 밸류
- del 시리즈명["인덱스명"] = 밸류