[Python] 판다스(pandas)_1. 시리즈(Series) 배열, indexing, slicing, boolean, operator
#정리
#01Series - 시리즈
#한 열을 '시리즈'라고 하며, 시리즈(열)이 모이면 '데이터 프레임'이 된다.
#import pandas as pd
#pandas version check-print("pandas version",pd.__version__)
#시리즈 관련 함수 col = pd.Series([11,22,33,11,22,33,11,22])
- print(type(col)) #dtype: int64 <class 'pandas.core.series.Series'>
- print(col.index) #RangeIndex(start=0, stop=3, step=1)
- print(col.values) #데이터 값 출력
- print(len(col))
- print(col.size)
#col.value_counts() : 데이터 별 중복 갯수
- print(col.value_counts())
#col.describe() : 정수 타입 시리즈에 대한 통계
- print(col.describe()) #갯수, 평균, 표준편차, 중간값, 등..#col.describe() : 문자 타입 시리즈에 대한 정보
- print(col.describe()) #정수와는 다른 정보가 나온다.
- count 8 - 데이터 수
- unique 3 - 고유 값 수
- top a - 비중이 큰 원소 중 선행한 원소
- freq 3 - top 원소의 중복 수#여러 방법으로 시리즈를 생성할 수 있다.
- col = pd.Series([i for i in range(1,10+1)]) #리스트
- col = pd.Series(range(1,10+1)) #레인지
- col = pd.Series(np.arange(1,10+1)) #넘파이레인지
- col = pd.Series(np.array([i for i in range(1,10+1)])) #넘파이배열
#indexing 값 접근- print(col[[3,7]].values) #int32 [4 8]
- col[1] = col[0] #1번 값을 0번 값으로 변경
- col[[5,6]] = col[[0,1]] #5,6번 값을 0,1번 값으로 변경
#slicing 값 접근
- print(col[3:7].values) #int32 [333 444 100 100] >ndarray type
- print(col[3:7].values[0]) # 333
#비교 연산 가능
- print((col > 5).values) #조건식에 넣어 각 데이터 별 참/거짓을 반환한다.
- print(col[col > 5]) #bool indexing 가능 : 조건식이 참인 데이터만 반환한다.
#index를 문자로 변경 가능
- 인덱스의 형태를 바꿀 수 있다.
- col = pd.Series(np.arange(1,10+1),index=[i for i in range(10,10+10)]) #index옵션 추가
- col = pd.Series(np.arange(1,10+1),index=['A','B','C','D','E','F','G','H','I','J']) #개별 지정 가능
- col = pd.Series(np.arange(1,10+1),index=[chr(i) for i in range(65,65+10)]) #문자 index가능
**변경된 index도 인덱싱/슬라이싱 적용이 가능하다.
- print(col[['A','G']].values) #int32 [4 8]
- print(col['D':'G'].values) #int32 [4 5 6 7] >ndarray type
#수학 , 통계 함수들 가능
- print("col.sum():",col.sum()) # 합계
- print("col.mean():",col.mean()) # 평균
- print("col.std():",col.std()) # 표준편차
#시리즈 응용
- print("one_line:\n",pd.Series(x.split('-')[0] for x in phones).value_counts())#연산함수(add,sub,mul,div)
<col01 + col02>
- sum_col = col01 + col02 #col01이 3번 인덱스까지 밖에 없어, index[4] = NaN 발생
- print(sum_col.dropna()) #NaN 값 자동 삭제
<col01.add(col02) : add default>
- add_col = col01.add(col02) #col01이 3번 인덱스까지 밖에 없어, index[4] = NaN 발생
- print(add_col.dropna()) #NaN 값 자동 삭제
<col01.add(col02,fill_value=0) : add, fill_value>
- add_col = col01.add(col02,fill_value=0) #부족 값을 0으로 대체하여 0+9 = 9로 반환
<col01.sub(col02,fill_value=0) : sub>
- sub_col = col01.sub(col02,fill_value=0) #부족 값을 0으로 대체하여 0-9 = -9로 반환
<col01.mul(col02,fill_value=0) ; multi>
- mul_col = col01.mul(col02,fill_value=0) #부족 값을 0으로 대체
<col01.div(col02,fill_value=0) : division>
- div_col = col01.div(col02,fill_value=0) #부족 값을 0으로 대체
#01Series - 시리즈
#한 열을 '시리즈'라고 하며, 시리즈(열)이 모이면 '데이터 프레임'이 된다.
#import pandas as pd
#pandas version check
-print("pandas version",pd.__version__)
#시리즈 관련 함수 col = pd.Series([11,22,33,11,22,33,11,22])
- print(type(col)) #dtype: int64 <class 'pandas.core.series.Series'>
- print(col.index) #RangeIndex(start=0, stop=3, step=1)
- print(col.values) #데이터 값 출력
- print(len(col))
- print(col.size)
#col.value_counts() : 데이터 별 중복 갯수
- print(col.value_counts())
#col.describe() : 정수 타입 시리즈에 대한 통계
- print(col.describe()) #갯수, 평균, 표준편차, 중간값, 등..
#col.describe() : 문자 타입 시리즈에 대한 정보
- print(col.describe()) #정수와는 다른 정보가 나온다.
- count 8 - 데이터 수
- unique 3 - 고유 값 수
- top a - 비중이 큰 원소 중 선행한 원소
- freq 3 - top 원소의 중복 수
#여러 방법으로 시리즈를 생성할 수 있다.
- col = pd.Series([i for i in range(1,10+1)]) #리스트
- col = pd.Series(range(1,10+1)) #레인지
- col = pd.Series(np.arange(1,10+1)) #넘파이레인지
- col = pd.Series(np.array([i for i in range(1,10+1)])) #넘파이배열
#indexing 값 접근
- print(col[[3,7]].values) #int32 [4 8]
- col[1] = col[0] #1번 값을 0번 값으로 변경
- col[[5,6]] = col[[0,1]] #5,6번 값을 0,1번 값으로 변경
#slicing 값 접근
- print(col[3:7].values) #int32 [333 444 100 100] >ndarray type
- print(col[3:7].values[0]) # 333
#비교 연산 가능
- print((col > 5).values) #조건식에 넣어 각 데이터 별 참/거짓을 반환한다.
- print(col[col > 5]) #bool indexing 가능 : 조건식이 참인 데이터만 반환한다.
#index를 문자로 변경 가능
- 인덱스의 형태를 바꿀 수 있다.
- col = pd.Series(np.arange(1,10+1),index=[i for i in range(10,10+10)]) #index옵션 추가
- col = pd.Series(np.arange(1,10+1),index=['A','B','C','D','E','F','G','H','I','J']) #개별 지정 가능
- col = pd.Series(np.arange(1,10+1),index=[chr(i) for i in range(65,65+10)]) #문자 index가능
**변경된 index도 인덱싱/슬라이싱 적용이 가능하다.
- print(col[['A','G']].values) #int32 [4 8]
- print(col['D':'G'].values) #int32 [4 5 6 7] >ndarray type
#수학 , 통계 함수들 가능
- print("col.sum():",col.sum()) # 합계
- print("col.mean():",col.mean()) # 평균
- print("col.std():",col.std()) # 표준편차
#시리즈 응용
- print("one_line:\n",pd.Series(x.split('-')[0] for x in phones).value_counts())
#연산함수(add,sub,mul,div)
<col01 + col02>
- sum_col = col01 + col02 #col01이 3번 인덱스까지 밖에 없어, index[4] = NaN 발생
- print(sum_col.dropna()) #NaN 값 자동 삭제
<col01.add(col02) : add default>
- add_col = col01.add(col02) #col01이 3번 인덱스까지 밖에 없어, index[4] = NaN 발생
- print(add_col.dropna()) #NaN 값 자동 삭제
<col01.add(col02,fill_value=0) : add, fill_value>
- add_col = col01.add(col02,fill_value=0) #부족 값을 0으로 대체하여 0+9 = 9로 반환
<col01.sub(col02,fill_value=0) : sub>
- sub_col = col01.sub(col02,fill_value=0) #부족 값을 0으로 대체하여 0-9 = -9로 반환
<col01.mul(col02,fill_value=0) ; multi>
- mul_col = col01.mul(col02,fill_value=0) #부족 값을 0으로 대체
<col01.div(col02,fill_value=0) : division>
- div_col = col01.div(col02,fill_value=0) #부족 값을 0으로 대체
--예문 코드 보기--
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
print("pandas version",pd.__version__) #pandas version check
print("---------------")
#print(dir(pd))
#한 열을 '시리즈'라고 하며, 시리즈(열)이 모이면 '데이터 프레임'이 된다.
col = pd.Series([11,22,33,11,22,33,11,22])
print(col)
print(type(col)) #dtype: int64 <class 'pandas.core.series.Series'>
print(col.index) #RangeIndex(start=0, stop=3, step=1)
print(col.values)
print(len(col))
print(col.size)
print("--col.value_counts() : 데이터 별 중복 갯수---")
print(col.value_counts())
print("--col.describe() : 정수 타입 시리즈에 대한 통계---")
print(col.describe()) #갯수, 평균, 표준편차, 중간값, 등..
print("---------------")
col = pd.Series(['a','b','c','a','b','c','a','b'])
print(col)
print(type(col))
print(col.index)
print(col.values)
print(len(col))
print(col.size)
print("--col.value_counts() : 데이터 별 중복 갯수---")
print(col.value_counts())
print("--col.describe() : 문자 타입 시리즈에 대한 정보---")
print(col.describe()) #정수와는 다른 정보가 나온다..
#count 8 - 데이터 수
#unique 3 - 고유 값 수
#top a - 비중이 큰 원소 중 선행한 원소
#freq 3 - top 원소의 중복 수
print("---------------")
for x in col:
print(x)
print("---------------")
print("---------------")
col = pd.Series(['a','b','c','a','b','c','a','b'])
print(col+str(20))
print(col+"kim")
print(col+"kim"+"lee")
print("==================")
#여러 방법으로 시리즈를 생성할 수 있다.
col = pd.Series([i for i in range(1,10+1)])
col = pd.Series(range(1,10+1))
col = pd.Series(np.arange(1,10+1))
col = pd.Series(np.array([i for i in range(1,10+1)]))
print(col)
print(col+10)
print(col*10)
print("----indexing 1----")
print(col[0])
col[0] = 100
col[1] = col[0] #1번 값을 0번 값으로 변경
print(col)
print("----indexing 2----")
print(col[[3,7]])
print(col[[3,7]].values) #int32 [4 8]
col[[5,6]] = col[[0,1]] #5,6번 값을 0,1번 값으로 변경
col[[3,7]] = [333,777]
col[[4,8]] = np.array([444,888])
print(col)
print("----slicing 1----")
print(col[3:7])
print(col[3:7].values) #int32 [333 444 100 100] >ndarray type
print(col[3:7].values[0]) # 333
print(col[3:7].values[1]) # 444
print("--비교 연산 가능------")
col = pd.Series(np.arange(1,10+1))
print(col.values)
print((col > 5).values) #조건식에 넣어 각 데이터 별 참/거짓을 반환한다.
print("--bool indexing 가능------")
print(col[col > 5]) #조건식이 참인 데이터만 반환한다.
print("--index를 문자로 변경 가능------")
col = pd.Series(np.arange(1,10+1)) #옵션 미적용 상태
print(col.index)
#인덱스의 형태를 바꿀 수 있다.
col = pd.Series(np.arange(1,10+1),index=[i for i in range(10,10+10)]) #index옵션 추가
print(col.index)
col = pd.Series(np.arange(1,10+1),index=['A','B','C','D','E','F','G','H','I','J']) #개별 지정 가능
print(col.index)
col = pd.Series(np.arange(1,10+1),index=[chr(i) for i in range(65,65+10)]) #문자 index가능
print(col.index)
#변경된 index도 인덱싱/슬라이싱 적용이 가능하다.
print("----indexing 3----")
print(col[['A','G']])
print(col[['A','G']].values) #int32 [4 8]
print("----slicing 2----")
print(col['D':'G']) #index D~G
print(col['D':'G'].values) #int32 [4 5 6 7] >ndarray type
print("--수학 , 통계 함수들 가능------")
col = pd.Series(np.arange(1,10+1))
print(col.values)
print("col.sum():",col.sum()) # 합계
print("col.mean():",col.mean()) # 평균
print("col.std():",col.std()) # 표준편차
print("--시리즈 응용------")
phones = ['010-xxxx-xxxx','02-aaa-aaaa',
'010-bbbb-bbbb','02-ccc-cccc',
'010-bbbb-bbbb','032-ccc-cccc',]
col = pd.Series(phones)
print(col.values)
print("value_counts:",col.value_counts())#전체 전화번호 중 가장 큰 중복 데이터 수
print(col[0])
print(col[0].split('-'))
print(col[0].split('-')[0])
print(col[0].split('-')[1])
print(col[0].split('-')[2])
print("----------")
print(col[1])
print(col[1].split('-'))
print(col[1].split('-')[0])
print(col[1].split('-')[1])
print(col[1].split('-')[2])
print("---지역번호별 카운팅(정석)----")
#전체 전화번호에서 지역번호별 카운팅 정석.
lst = []
for x in col:
print(x.split('-')[0])
lst.append(x.split('-')[0])
new_col = pd.Series(lst)
print(new_col)
print(new_col.value_counts())
'''내 풀이
print("----------")
#지역 번호 별 카운트 확인
phone_lst = pd.Series(phones)
print(len(phone_lst))
for i in range(len(phone_lst)):
print(phone_lst[i].split('-')[0])
phone_lst[i] = phone_lst[i].split('-')[0]
print(phone_lst.value_counts())
'''
print("---지역번호별 카운팅(시리즈 문법)----")
phones = ['010-xxxx-xxxx','02-aaa-aaaa',
'010-bbbb-bbbb','02-ccc-cccc',
'010-bbbb-bbbb','032-ccc-cccc',]
col = pd.Series(phones)
col = pd.Series(x for x in phones) #만들어지는 시리즈는 같지만, 'x'를 활용할 수 있게 된다.
print(col.values)
col = pd.Series(x.split('-')[0] for x in phones)
print(col.values)
print(col.value_counts())
#한 줄로 사용가능
print("one_line:\n",pd.Series(x.split('-')[0] for x in phones).value_counts())
############################################################
print("---연산함수(add,sub,mul,div)-------")
col01 = pd.Series(range(1,4+1))
print(col01)
col02 = pd.Series(range(5,9+1))
print(col02)
print("---col01 + col02-------")
sum_col = col01 + col02
print(sum_col) #col01이 3번 인덱스까지 밖에 없어, index[4] = NaN 발생
print(sum_col.dropna()) #NaN 값 자동 삭제
print("---col01.add(col02)-------")
add_col = col01.add(col02)
print(add_col) #col01이 3번 인덱스까지 밖에 없어, index[4] = NaN 발생
print(add_col.dropna()) #NaN 값 자동 삭제
print("---col01.add(col02,fill_value=0)-------")
add_col = col01.add(col02,fill_value=0) #부족 값을 0으로 대체하여 0+9 = 9로 반환
print(add_col)
print("---col01.sub(col02,fill_value=0)-------")
sub_col = col01.sub(col02,fill_value=0) #부족 값을 0으로 대체환
print(sub_col)
print("---col01.mul(col02,fill_value=0)-------")
mul_col = col01.mul(col02,fill_value=0) #부족 값을 0으로 대체
print(mul_col)
print("---col01.div(col02,fill_value=0)-------")
div_col = col01.div(col02,fill_value=0) #부족 값을 0으로 대체
print(div_col)