serTest2 - Series 생성하기!
import pandas as pd
import numpy as np
myList = [10,20,30,40] #1차원
d = {'aa':10,'bb':20,'cc':30} #1차원
t = (10,20,30,40) #1차원
sr = pd.Series(myList, dtype=np.int32) #Series 생성하기, List 가능
sr
sr1 = pd.Series(d) #Series 생성하기, Dictionary 가능
sr1
sr2 = pd.Series(t) #Series 생성하기, Tuple가능
print(sr2)
print(sr2[1])
sr = pd.Series(myList, index=['a','b','c','d'], dtype=np.int32, name = "byb")
sr.shape
print (sr.values)
serTest3 - Series 멤버속성
import pandas as pd
import numpy as np
if __name__ == '__main__':
data = {'aa':10, 'bb':20, 'cc':30}
sr=pd.Series(data)
print(sr.index) #Series 인덱스
print(sr.values) #Series 값
print(type(sr.values), sr.index)
print(sr.dtype, sr.ftype) #Series 데이터 타입
print (sr.shape)
print(sr.ndim) #Series 차원
print(sr.strides)
print(sr.base)
print(sr.blocks) #Series -> Dictionary 전환
※ 파이썬 딕셔너리와 Pandas Series의 공통점, 차이점
Index와 value를 가진다는 점에서 key와 value를 가지는 파이썬 딕셔너리와 유사하다 볼 수 있다.
그렇기에 파이썬 딕셔너리를 통해 Series를 생성할 수 있다.
딕셔너리에서 key값을 이용해 value를 조회하듯 Series에서 index를 이용해 value를 조회할 수 있다.
딕셔너리와 Series의 차이점은, 딕셔너리의 Key는 순서가 없고 pandas Series의 index는 순서가 있다는 점이다.
그렇기에 Series는 index의 순서를 통해서도 value 조회가 가능하다.
Pandas Series에서는 Series * 1000 같은 요소별 연산을 지원한다.
serTest4 - Series 인덱스 접근법
import pandas as pd
d = {'a':3,'b':4,'c':5,'d':6,'e':7}
sr = pd.Series(d)
print (sr[0:4:2]) #인덱스 슬라이싱 가능
print (sr[[0,2,3]]) #인덱스에 리스트 줄 수 있음
print (sr [['a','d']]) #인덱스에 키값 리스트 줄 수 있음
#sr.index = [1,2,3,4,5]
print(sr)
print (sr[1]) #index가 숫자일 때는 index값으로 찾는다. zero-base가 아닐 때
print (sr['a']) # index명으로 조회
print (sr.iloc[4]) #zero base
print (sr.loc['a']) # search to key value
serTest5 - Series 연산
data1 = {'aa':10, 'bb':20, 'cc':30, 'dd':40, 'ee':50}
sr1 = pd.Series(data1, name='국어점수')
sr + sr1 # Series와 Series를 더할 수 있음, 연산하는 시리즈의 key 값이 다르면 연산 정상 동작 안함
salalry = pd.Series([1000,2000,3000,4000])
print(salalry*0.967) #Series.values에 곱연산
li = [1000,2000,3000,4000]
print([n*0.967 for n in li])
#boolean index
print(sr[ ['aa','dd'] ]) # [True, False, False, True, False] 와 같음
print(sr[ [True, False, False, True, True]])
print(sr [sr >= 30]) #boolean index와 동일함, # [False, False, True, True, True] 와 같음
#논리연산자 (and ==> &, or ==> |, not ==> ~)
#주의해야 할 사항, &연산자가 우선순위가 더 높기 때문에 괄호 해주어야 함
sr[ (sr >= 30) & (sr <= 50)]
sr[ ~(sr==30) ] #앞에건 논리연산에서의 not, sr [ sr!= 30]은 관계연산자에서의 not
print (sr.isin([10,30])) #boolean index된 값, 해당 Series에 지정한 Value가 있다면 True 리턴
print(sr [ ~sr.isin([10,30]) ])
sr.index.isin(['aa','dd']) #해당 Series의 index 안에 지정한 값이 있다면 True 반환, isin안에는 list값을 주어야 한다
print(type(sr))
print(type(sr.index))
serTest6, 7 - Series 값 수정, 추가, 삭제, 정렬
import pandas as pd
import numpy as np
data = {'aa':10, 'bb':20, 'cc':30, 'dd':40, 'ee':50}
sr = pd.Series(data, name='국어점수')
print(sr)
sr[0] = 100
sr.iloc[0] = 120
sr.loc['cc'] = 3000 # 존재하던 key값이면 value 수정
sr.loc['ff'] = 4 #존재하지 않던 key값이면 신규 key - value로 추가
sr['abc'] = 9
print(sr)
sr[1:4] = sr[1:4]+5
sr[sr>30] = 5 #모든 sr.values에 대하여 비교 연산하여, True인 부분에 값 5로 수정
print (sr)
# newSr = sr.append(pd.Series([1,2,3], index=['gg','hh','ii'])) #기존 Series를 변형하는것이 아니라 새로운 Series객체를 만들어 반환함
# print(newSr)
#Series에서 drop은 index로만 가능하다
deletedSr = sr.drop('aa', inplace=True) # inplace 값이 True인 경우 변경된 값을 새로운 시리즈를 만들어서 반환하는 것이 아니라,
#원본 시리즈에서 바로 변경하고 값을 따로 반환하지 않는다
#deletedSr = sr.drop('aa')
print(sr)
print(deletedSr)
#del은 파이썬 내장 함수
del (sr['bb'])
print(sr)
# 정렬
data = {'aa':10, 'bb':20, 'cc':30, 'dd':40, 'ee':50}
sr = pd.Series(data, name='국어점수')
print (sr.sort_values(ascending=False)) #ascending 인자를 사용하여 오름차순, 내림차순 선택 가능, quicksort사용
print (sr.sort_index(ascending=True))
serTest 8 - Series 데이터 검색(정규표현식)
sr.index.str # <pandas.core.strings.StringMethods at 0x26e14c43b70>
sr.str
sr.str.contains('kiwi') #boolean indexing
sr [ sr.str.contains('app') ] #문자열 검색
sr = pd.Series(['applei', 'kixi', 'banna', 'apply'])
print(type(sr))
sr.index = ['ab','cd', 'ef', 'gh']
print(sr [ sr.str.contains('[ew]i') ]) #정규식 패턴
print(sr [ sr.str.contains('[a-z]i') ]) #정규식 패턴
print(sr [ sr.str.contains('^a.+i$') ]) #regex = False인 경우에는 정규표현식이 아니라 정확한 단어를 찾는다는 의미임
sr2 = pd.Series(['김철수', '이순신', '이이', '이황', '김이', '박김이'])
sr2 [ sr2.str.contains('^김')]
sr2 [ sr2.str.contains('[김이]이')]
sr2 [ sr2.str.contains('[가-힣]이')] #알파벳 a-z와 같은 의미
serTest 9 - 통계관련 멤버함수
#통계관련 멤버함수
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = {'aa':10, 'bb':20, 'cc':30, 'dd':40, 'ee':50}
sr = pd.Series(data, name='국어점수')
print(sr)
sr.min()
sr.idxmin()
sr.max()
sr.idxmax()
sr.head()
sr.tail()
type(sr[sr>=30])
sr[sr>=30].max()
sr[sr<=30].mean()
sr.cumsum()
sr.median()
sr.std() # 표준 편차. 편차가 작을 수록 값이 모여있고, 클 수록 벌어져 있는 것
sr.quantile([0.2,0.5,0.9]) #20%, 50%, 90% 해당되는 값
# for n in sr:
# print(n)
# for n in sr.index:
# print(n)
# for idx,v in sr.items():
# print(idx,v)
# sr.to_excel( r'e:\a.xlsx')#제어 코드의 의미를 없에 주기 위하여 앞에 r을 붙임, Series를 excel에 바로 저장
sr.plot('line')
sr[sr>=30].plot('bar')
plt.show()
sr.apply(lambda n: n+1 if n<=30 else n+2 )
#윗 줄과 같은 의미
def fn(n):
return n+1 if n<=30 else n+2
sr.apply(fn)
serTest 10 - 종합내용
'이것저것' 카테고리의 다른 글
python2 설치 및 cmd에서 python2,3 으로 사용하는 법 블로그 링크 (0) | 2020.05.07 |
---|---|
lg 물류창고 문제(플로이드 알고리즘) (0) | 2019.04.14 |
파이썬 연산자 (0) | 2019.03.10 |
파이썬 데이터타입 (0) | 2019.03.10 |
pandas, kaggle 정리 (0) | 2019.01.28 |
댓글