반응형
In [1]:
import numpy as np
import pandas as pd
Series¶
- pandas의 기본 객체 중 하나
- dataframe에서 파생된 결과로 series가 많이 사용됨
- numpy의 ndarray를 기반으로 인덱싱을 기능을 추가하여 1차원 배열을 나타냄
- index를 지정하지 않을 시, 기본적으로 ndarray와 같이 0-based 인덱스 생성, 지정할 경우 명시적으로 지정된 index를 사용
- 같은 타입의 0개 이상의 데이터를 가질 수 있음
- data로만 생성하기
- index는 기본적으로 0부터 자동적으로 생성
In [2]:
## Series 생성하기
a1 = pd.Series([1, 2, 3])
a1 ## 기본적으로 인덱스가 자동 생성됨
Out[2]:
In [3]:
a2 = pd.Series(['a','b','c']) ## 문자열 시리즈
a2 ## 자동으로 타입을 인식함
Out[3]:
In [5]:
a3 = pd.Series(np.arange(200))
a3
Out[5]:
- data, index함께 명시하기
pd.Series(
data = None, ## 데이터 입력
index = None, ## 인덱스
dtype = None, ## 타입
...
)
In [6]:
pd.Series([1, 2, 3], [100, 200, 300]) # 인덱스에 100, 200, 300 입력
Out[6]:
In [7]:
pd.Series([1, 2, 3], ['a', 'm', 'k']) # 인덱스에 문자열 삽입
Out[7]:
- data, index, data type 함께 명시하기
In [11]:
a6 = pd.Series(np.arange(5), np.arange(100, 105), dtype = np.int16) ## Series 에 타입 명시
a6
Out[11]:
인덱스 활용하기¶
In [12]:
a6.index # 인덱스 불러오기
Out[12]:
In [13]:
a6.values # 값만 불러오기
Out[13]:
- 인덱스를 통한 데이터 접근
In [14]:
a6[100] # 인덱스로 데이터 추출
Out[14]:
In [16]:
a6[105] # 인덱스가 없는 걸 추출하려 하면 keyError를 내뱉음
- 인덱스를 통한 데이터 업데이트
In [15]:
a6[100] = 70 # 인덱스를 이용해 데이터 변경
a6
Out[15]:
In [17]:
a6[105] = 67 # 인덱스에 없는 값에 데이터를 넣으면 데이터 추가
a6
Out[17]:
- 인덱스 재사용하기
In [20]:
a7 = pd.Series(np.arange(6), a6.index) # 다른 테이블의 인덱스를 그대로 사용해도 됨
In [21]:
a7
Out[21]:
- index를 활용하여 멀티플한 값에 접근
In [36]:
a7[[100, 104, 105]] # 여러개의 indes에 접근하려면 리스트 입력
Out[36]:
2.Series 데이터 심플 분석(개수, 빈도 등 계산하기)¶
Series size, shape, unique, count, value_counts 함수¶
- size : 개수 반환
- shape : 튜플형태로 shape반환
- unique: 유일한 값만 ndarray로 반환
- count : NaN을 제외한 개수를 반환
- mean: NaN을 제외한 평균
- value_counts: NaN을 제외하고 각 값들의 빈도를 반환
In [25]:
s = pd.Series([1, 1, 2, 1, 2, 2, 2, 1, 1, 3, 3, 4, 5, 5, 7, np.NaN])
s
Out[25]:
In [26]:
len(s) # 데이터 프레임의 길이 구하기 (row 개수)
Out[26]:
In [28]:
s.size # Series 의 길이 구하기
Out[28]:
In [29]:
s.shape # 데이터 프레임의 크기 구하기(row, col)
Out[29]:
In [30]:
s.unique() # Series의 unique한 숫자 구하기
Out[30]:
In [31]:
s.count() # NaN을 제외한 data의 개수 구하기
Out[31]:
numpy와의 차이점
- numpy의 경우 nan이 있으면 연산을 못함
- series의 경우 nan을 무시하고 연산을 진행함
In [33]:
a = np.array([2, 2, 2, 2, np.NaN])
print(a.mean()) #numpy일 때
b = pd.Series(a)
print(b.mean()) # Series일 때
In [34]:
s.value_counts() # 각 원소의 빈도수(분포)를 구하기
Out[34]:
head, tail 함수¶
- head : 상위 n개 출력 기본 5개
- tail : 하위 n개 출력 기본 5개
In [37]:
s.head() # 상위 n개 출력(default : 5)
Out[37]:
In [38]:
s.head(10) # 상위 10개 출력
Out[38]:
In [39]:
s.tail() ## 하위 n개 출력
Out[39]:
3. Series 데이터 연산하기¶
index를 기준으로 연산¶
- Series 끼리 연산할 때는 같은 index를 기준으로 연산한다.
In [42]:
s1 = pd.Series([1, 2, 3, 4], ['a', 'b', 'c', 'd'])
s2 = pd.Series([6, 3, 2, 1], ['d', 'c', 'b', 'a'])
print(s1)
print(s2)
In [44]:
s1 + s2 # 같은 인덱스끼리 연산
Out[44]:
산술연산¶
- Series의 경우에도 스칼라와의 연산은 각 원소별로 스칼라와의 연산이 적용
- Series와의 연산은 각 인덱스에 맞는 값끼리 연산이 적용
- 이때, 인덱스의 pair가 맞지 않으면, 결과는 NaN
In [45]:
s1 ** 2
Out[45]:
In [46]:
s1 ** s2
Out[46]:
index pair가 맞지 않는 경우¶
- 해당 index에 대해선 NaN 값 생성
In [47]:
s1['k'] = 7
s2['e'] = 9
In [48]:
print(s1)
print(s2)
In [50]:
s1 + s2 # index가 맞지 않으면 nan 생성
Out[50]:
4. Series boolean selection 으로 데이터 선택하기¶
Boolean selection¶
- boolean Series가 []와 함께 사용되면 True 값에 해당하는 값만 새로 반환되는 Series객체에 포함됨
- 다중조건의 경우, &(and), |(or)를 사용하여 연결 가능
In [52]:
s = pd.Series(np.arange(10), np.arange(10) + 1)
s
Out[52]:
In [53]:
s > 5 ## True, False 값 내뱉기
Out[53]:
In [54]:
s[s > 5] # 값이 True인 값만 내뱉기
Out[54]:
In [55]:
s[s % 2 == 0] # 짝수인 값만 추출하기
Out[55]:
index를 기준으로 filtering 하기
In [56]:
s.index > 5
Out[56]:
In [58]:
s[s.index > 5] # index가 5보다 큰 것만 추출
Out[58]:
다중 조건인 경우
- 다중조건을 만족시키려면 각 조건에 ()를 넣어줘야 한다.
In [59]:
s[(s > 5) & (s < 8)]
Out[59]:
In [60]:
(s >= 7).sum() ## Boolean의 sum. 개수 구하기
Out[60]:
In [61]:
s[s >=7].sum() ## 해당 데이터의 값의 합을 구하기
Out[61]:
5. Series의 데이터 변경 - 슬라이싱 이해하기¶
Series 값 변경¶
- 추가 및 업데이트: 인덱스를 이용
- 삭제: drop함수 이용
In [63]:
s = pd.Series(np.arange(100, 105), ['a', 'b', 'c', 'd', 'e'])
s
Out[63]:
In [64]:
## 인덱스로 값 변경하기
s['a'] = 200
s
Out[64]:
In [66]:
## 인덱스로 값 추가하기
s['k'] = 700
s
Out[66]:
In [68]:
## 인덱스로 값 삭제하기
s.drop('k') # 반환만 할 뿐 s 객체에 연산이 적용된 것은 아님
s
Out[68]:
In [69]:
s = s.drop('k')
s
Out[69]:
In [70]:
s.drop('e', inplace = True) # 해당 객체에 연산을 바로 적용
s
Out[70]:
In [71]:
s[['a','b']] = [300, 500] # 여러개의 값 업데이트 하기
s
Out[71]:
Slicing¶
- 리스트, ndarray와 동일하게 적용
In [72]:
s1 = pd.Series(np.arange(100, 105))
s1
Out[72]:
In [73]:
s1[1:3] # 1번째 ~3번째 데이터 출력
Out[73]:
In [74]:
s2 = pd.Series(np.arange(100, 105), ['a', 'b', 'c', 'd', 'e'])
s2
Out[74]:
In [76]:
s2[1:3] # index가 숫자가 아닐 경우 순서대로 받아와서 sliccing
Out[76]:
In [77]:
s2['c':'d'] # 문자열로 indexing하는 경우 마지막 문자도 포함해서 불러옴
Out[77]:
반응형
'Study > ML_Basic' 카테고리의 다른 글
머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 분석을 위한 Python(Pandas) – (3) (0) | 2020.09.30 |
---|---|
머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 분석을 위한 Python(Pandas) – (2) (0) | 2020.09.30 |
머신러닝과 데이터 분석 A-Z 올인원 패키지 - 데이터 처리를 위한 Python(Numpy)(2) (0) | 2020.09.30 |
머신러닝과 데이터 분석 A-Z 올인원 패키지-데이터 처리를 위한 Python(Numpy) – (1) (0) | 2020.09.30 |
머신러닝과 데이터 분석 A-Z 올인원 패키지-데이터 수집을 위한 Python(2) (0) | 2020.09.10 |