카테고리 없음

파이썬 정리

머리큰개발자 2021. 6. 15. 09:38

파이썬

  • 변수와 Namespace 메모리
    • Namespace 에 사용하는 name(변수명, 함수명, class명, method명, module 명 등) 들이 저장되며, reference 에 name의 주소가 저장된다.
    • name binding
      • name의 reference 영역에 객체의 id를 저장하여 객체를 연결시키는 과정
      • assignment( =), augmented assignment(*=, +=, -=,...), class method function 정의, import 할 때 발생
    • del name을 통해 지울 수 있다.
    • id(name) 을 통해 실제 메모리 값 접근
    • Identifier
      • 변수명 등 식별자
      • interpreter 는 identifier를 발견하면 namespace에서 탐색한다
      • 읽기 - local namespace -> global -> built-in
      • 쓰기 - 현재 namespace 만
  • 수치형 Numeric Type
    • 정수형 integral
      • 정수 integer, _로 자리 구분(3.6부터)
        • default 10진
        • 2진 0b ~
        • 8진 0o~
        • 16진 0x ~
      • 부울 bool
        • True
        • False - 0, 0.0, '', None
    • 실수형 floating point, _로 자리 분
      • 3.1
      • 3e4
    • 복소수 complex
      • a+bj
  • 문자열 String Type
    • str - 문자열
      • '', "", """ """, ''' '''
      • string prefix
        • r : raw
          • 순문자열 그대로 저장
        • f : formatted
          • 대입 가능
      • 타입 변환
        • str()
          • 정수를 문자열로 변환
        • int(base=10)
          • 문자열 -> 정수
          • base 입력시 해당 진수로 번역해서 저장
        • float()
          • 문자열 -> 실수
      • 입출력
        • input()
        • print()
      • method
        • split(sep=' ')
          • 값 미설정시 공백 기준을 분리 후 문자열 리스트 반환
        • '-'.join(li)
        • s.find('l')
        • s.upper,lower,strip
      • 포맷화된 문자열 Formatted String
        • 포맷 지시자와 %연산자
          • C/C++ 형식
          • '문자열' % (값1,값2,..)
          • 문자열 %s, 문자 %c, 정수 %d, 실수 %f, 8진수 %o, 16진수 %x(X), # 진법표시 %인쇄 %%
          • %(정렬 +-)(0으로 채우기)(숫자 폭)(. 정밀도)
        • format() method
          • "{idx (name): (채울문자, 정렬)(숫자 폭)(,표시)(.정밀도)(타입)}
            • '{1:0>5.2f}'.format(0,1.234)
              • = 01.23
          • {{}} - {}입력
          • dict unpack **
        • 'f' string prefix
          • f'{name}, {age}'
            • 바로 변수명으로 사용 가능
          • 사용법은 format() method와 동일
    • bytes - 바이트
  • Iterable Type
    • Container
      • 데이터의 주소들을 저장하는 slot 들의 집합인 객체
      • 문자열 String
        • s.upper(), s.lower()
        • s.replace(o, n, count)
          • s에서 o문자열 찾아서 n으로 count 만큼 (default -1 모두) 변경 새 문자열 반환
        • sep.join(iterable)
          • it item 하나의 문자열로 sep로 구분하여 새 문자열 반환
        • s.split(sep, maxsplit)
          • maxsplit 만큼 sep로 구분해서 잘라서 리스트로 반환, rsplit은 오른쪽부터
        • s.splitlines(keepends=False)
          • \n 등 line boundaries 만나면 구분, 리스트로 반환, keepends = True 면 line boundaries 제거안함
        • s.strip(t), rstrip,lstrip
          • t 에 포함된 문자를 만나면 삭제, 없는거 만나면 중지, default 는 공백, 새 문자열 반환
        • s.swapcase()
          • 대소문자 서로 변환
        • s.title()
          • 단어 시작마다 대문자
        • s.capitalize()
          • 첫 글자만 대문자
        • s.center(w,f), s.ljust, l.rjust, s.zfill(w)
          • w 길이로 변환한 문자열, 빈 공간 f로 채움, zfill 은 0으로 채움, w<s.length면 원래 문자열 반환
        • s.find(t, start, end), rfind,
          • s에서 t를 찾는 첫 글자 index 반환 없으면 -1 반환 (s.index는 error)
        • s.startswith(t, st, end), s. endswith, s.count
          • t로 시작되거나 끝나면 True, 혹은 개수
      • 연속형 Sequence - 순서 o , index o
        • 수정 불가형 immutable
          • 문자열 str
          • 튜플 tuple
            • ()
            • pack
              • , 로 구분된 여러 개 값 자동생성
                • t1 = (1,2,3); t2= 1,2,3 같음
            • unpack
              • 여러 변수로 대입
                • a,b,c = t1;
              • 변수 개수 안맞으면 error
              • * 키워드
                • unpack 할 때 남은 모든 수 대입
                  • a, *b, c = t1;
          • 바이트 bytes
        • 수정 가능형 mutable
          • 리스트 list
            • []
            • Method
              • +, *
              • extend(iterable) (item 꺼내서 저장)
              • append(item) ( 그대로 저장)
              • [] 접근 가능, slicing
              • del (slot 축소)
              • s.clear(slot 수 0)
              • s.copy()
              • s.reverse()
          • 바이트 어레이 bytearray
        • * , + 연산
          • container 를 연결하여 새로운 객체 생성
          • id 는 같기 때문에 하나 변경할시 해당하는 slot 변경됨(다중 참조)
        • slicing 연산
          • s[m:n] or s[m:n:k]
          • slice 함수
            • slice(start,stop,step) 가능 (생략 None)
      • 집합형 set - 순서 x, 개별 접근 x, 중복 x
        • 수정 불가형 immutable
          • 고정 집합 frozenset
        • 수정 가능형 mutable
          • 집합 set
            • set() ( {} )
            • item 으로 mutable(list,set,dict)불가
            • method
              • | 합집합
              • & 교집합 (a&b&c ..)
              • - 차집합
              • ^disjoint
              • add(x)
              • remove(x) 없을시 error
              • discard 없을시 error x
              • pop() 임의 아이템 제거 및 반환, 없을시 error
              • clear() 모두 제거
              • copy() 얕은 복사
      • 매핑형 mapping - 순서 x, key로 접근, key-value쌍
        • 수정 가능형 mutable
          • 사전 dict
            • {}
            • key 로 mutable (list, set, dict) 불가
            • method
              • dict.keys() 키 튜플
              • dict.values() 값 튜플
              • dict.items() key-value 튜플
              • del d[key]
              • d.pop(k,[default])
                • key 가 k인 것 제거, 없을시 default 반환, default 없으면 error반환
              • d.popitem()
                • 마지막 item 반환 및 제거 없을 경우 error
              • dict.fromkeys(it, obj)
                • it -key , obj -value로 dict 생성
      • Container 변환 함수
        • tuple(it)
        • list(it)
        • set(it)
          • 중복 제거, mutable item x
        • dict(it)
          • (key,value) 쌍이어야 하고, key로 mutable x
        • str(obj)
          • object 타입이면 모두 가능
      • Mutable Container
        • Item 추가
          • list
            • l.append(item)
            • l.insert(idx, item)
          • set
            • s.add(item)
          • dict
            • d['key'] = value
            • 없으면 추가 있으면 갱신
        • Mutable - sequence type(list)method
          • s.pop(m) = m번 index(default -1) 없으면 error
          • s.remove(x) = s에서 x와 동일한 첫 번째 제거 없으면 error
          • s.sort(*, reverse, key(비교함수))
          •  
    • Range
      • 연속형 Sequence
        • 수정 불가형 immutable
          • range
            • 생성규칙 저장(메모리 이득)
            • range(start,stop, step)
    • Iterator
      • 최적화에 유리, index x, item 꺼낼시 소진, container 로 변환해서 사용
      • generator
        • 식 (exp for target in iterable if exp1 if exp2 ... for target2 in iterable 2 if ...) - else는 불가, 연속으로 아이템 사용도 가능 (exp for y in x for z in y)
        • Comprehensions - 편하고 빠름ㅋ
          • generator 를 이용해 container 생성
          • list - [generator], set - {g}, dict - {k:v}
      • map(function, it, [..])
        • function 의 파라미터 수 만큼 iterable 전달되어야함
      • zip(*it)
        • item 들을 튜플 쌍으로 반환 ( zip(x,y) 시 x,y item 하나씩 묶음
        • 길이 다를시 가장 짧은 걸로
      • filter([function], it)
        • 결과가 True 인 item 목록 filter 타입 반환
      • enumerate(it, [start=0])
        • start 시작번호 지정
        • idx, value 튜플 쌍 반환
    • Built-in function
      • item 존재 여부 판단
        • x in it - item 중 하나가 같으면 true
        • x not in it - item 중 하나가 x와 같으면 false
      • max(it, [key, default] ), min
        • key 함수 설정 가능(반환값 기준 판별)
        • default - 빈 iterable 일 경우 반환값(x -> error)
      • len(con)
        • container의 item 개수
      • sum(it, [start])
        • start 부터 합산
      • sorted(it, [key, reverse])
        • key 함수 설정 가능(반환값 기준 정렬)
        • reverse = True 면 내림차순
      • Sequence Type Method
        • s.index(x, [m [n]])
          • m~n-1 사이 첫번째 x 인덱스, 없을시 error
        • s.count(x)
          • s 안에 x 개수, 없으면 0
  • Built-in function
    • abs(x)
    • pow(v,e,[m])
      • v 의 e 승, % m
    • divmod(a,b)
      • (a//b, a%b) 반환
    • round(x, [d])
      • d<=0
        • 정수부 d 자리만큼 0, 반올림
      • d > 0
        • 소수부 d 자리에서 반올림
      • 생략 or None
        • 가장 가까운 정수
    • oct(x), hex(x), bin(x)
      • 각 prefix 8,16,2 진수 문자열로 변환
    • chr(i)
      • 번호 i에 대응되는 Uniconde 문자 반환(chr(65) = 'a')
    • ord(c)
      • 문자 c 에 대응되는 코드 번호 반환(Unicode)
    • eval(exp,[ globals [ locals]])
      • exp 문자열 수식을 계산.
      • 식(expression) : 한 개의 객체로 eval 가능한 것
      • globals, locals -> 변수들을 dict형식으로 전달
    • exec(stp [globals[locals]])
      • st 문을 계산
      • 문 (statement) : executable 한 최소한의 코드
  • 사용자 정의 함수
    • def func(a1 : int, a2 : str) -> int: return x;
    • 힌트 사용 가능
    • call by assignment
      • immutable 을 전달시 원본 값 변함 x (새 binding)
      • mutable 전달시 원본 값 변함
    • local namespace 로 넘어감
      • 함수 내의 변수명들은 먼저 lns 에 등록이 되고 실행되면서 binding 됨
        • b=a; a=0; 일 경우 아직 a는 비어있기 때문에 b에서 binding error(UnboundLocalError) 가 나온다.
      • 함수 종료시 namespace 제거됨
      • 호출 측에서 return object 의 id를 binding 하여 사용
    • Global 키워드
      • 전역 변수에 대한 쓰기 동작도 가능하게 해줌
      • 없으면 생성 있으면 갱신
    • nonlocal 키워드
      • local 함수간 쓰기 공유 가능
      • 예시
        • def f(): a=20; def f1(): nonlocal a; def f2(): nonlocal a;
      • 만약 상위 LNS 에 없는 변수명이면 에러
    • Parameter
      • pPK, pPKd ( 위치 키워드)
        • aP(값만 전달)
        • aK(keyword=value로 전달)
        • ak 는 ap 뒤에만 올 수 있다.
        • default 값(pPKd)는 오른쪽부터 채워야함
      • pP (위치 전용)
      • pK, pKd(키워드 전용)
        • keyword로만 전달 받을 수 있고, * 이후의 모든 파라미터는 pK나 pKd이다
        • def func(a,b, *, c,d=400,e); c부터는 pK라 default 아무데나 가능(순서 상관x)
      • *pVP (가변- 위치)
        • 0개 이상의 aP로 전달받음( 튜플)
        • 반드시 하나만 사용 가능하며, pK 앞에 있어야하고, *pVP 앞에서는 pPKd 소용없음(0개 일때 제외)
      • **pVK (가변- 키워드)
        • dict 로 묶여서 전달됨 func(v1=1) 이면 **pVK는 {'v1':1} 로 전달받음
  • 조건식
    • true if exp else false
    • 식만 사용가능하며 if 문에 비해 빠른 동작을 자랑한다.
  • 반복문
    • 다른건 c랑 동일 (iterable 넣는 것 좀 다르고)
    • for 나 if 등 들여쓰기 블록은 별도의 namespace 생성 x
    • for- else
      • for 문이 break 나 return 처럼 강제로 안끝났을 때(정상적으로 끝났을 때) else문이 반드시 실행. 이거 편함 flag안써도되고
    • while- else 마찬가지
  • pandas
    • 2009년말 오픈 소스 출범! 관계형 or 레이블 기반
    • 시계열 Time Series
      • 일정 시간 간격으로 배치된 날짜or시간 수열
      • datetime
        • 파이썬 표준 라이브러리
        • from datetime import datetime
        • datetime 끼리 차이를 구할 때 timedelta 객체 생성
        • datetime(y,m,d,h,m,s)
        • dt.strftime('%A. %m/%d')
          • datetime 객체에서 요일 월/일 문자열화
      • pandas의 시계열 data 유형
        • read_csv(.., parse_dates=True)
        • pd.Timestamp(input, freq, tz,..)
          • datetime과 유사, 특정 날짜 시간을 의미하는 가장 기본적인 유형
          • pd.Timestamp(15111111, unit='s')
            • UTC인 1970-1-1 0:0:0 부터 경과시간을 초로 환산하여 더한 시간
            • dt. (accessor) 로 접근, dt.year, dt.day, dt.is_month_start() 등
          • pd.to_datetime(arg, format,...)
            • arg를 datetime 으로 바꿔주며 arg는 웬만한건 다 알아먹음, 못알아 먹으면 format로 지정
          • pd.date_range(start,end,periods,freq,...)
            • start 부터 end 까지 혹은 start 부터 periods 번 만큼
          • 인덱싱 가능
            • sr['2021-1'] - 2021년1월꺼 모두
            • sr['2021': '2022'] 2021~2022모두
            • sr[sr.index.day<15], sr[sr.dt.day.between(1,10)
        • pd.Timedelta
          • 절대시간 기간(차이)
        • pd.Period
          • 특정 시점 및 주기로 정의된 시간 범위
        • pd.DateOffset
          • 달력 산술 고려 상대시간기간
          • pd.DateOffset(n, normalize, **kwds)
            • normalize = True면 시간 자정
            • pd.offsets.Week(weekday=2)
              • 1주일 단위 2일 기준(화욜?) offset 생성
            • pd.DateOffset(months=2) 2달 후
    • numpy 의 ndarray를 사용함
      • 특징
        • 1. Element-wise
          • 배열간의 연산은 item끼리 자동으로 됨
        • 2. Broadcasting
          • Shape가 맞지 않는 경우 자동으로 통일
          • 우측( 번호가 높은 쪽으로) align 한 후에 요소수 1로 생성한 후, 요소수 1인 배열을 상대축과 맞춤( (3,2)와 (2,) 계산시 (2,) => (1,2) => (3,2) 값은 복사
      • axis
        • 가장 나중에 추가된 축이 axis 0 차례대로 axis -1, axis -2...
        • (2,3,4) 면 axis 0 1 2 ( -3 -2 -1) 임
      • numpy.array(obj), numpy.arange([start,] stop,[step,])
      • numpy.reshape()
      •  
    • Data Structure
      • DataFrame
        • row Index - df.index
        • columns Index - df.columns
        • values(2d array) - df.values
      • Series
        • Index - sr.index
        • values(1d array) - sr.values
        • name - sr.name
      • Index
        • values - i.values
        • name - i.name
    • Method
      • 추출
        • df(sr).head(n)
          • - n개 추출(음수=뒤에 n개 제외)
        • df(sr).tail(n)
          • - 뒤에서 n개 추출(음수 = 처음 n개 제외)
        • df(sr).nlargest(n,col(sr x), keep) || nsmallest()
          • - 가장 큰(작은) n개를 col 기준에 따라 keep (first ...) 로 꺼냄
        • df.select_dtypes(include, exclude)
          • dtype 이 include 에 속하고 exclude에 속하지 않은 것만 뽑아줌
        • df/sr.pop(item)
          • column 이나 index label 에 해당하는 아이템 뽑아줌( series 나 scalar 반환, 원본에서 삭제)
      • 정보확인
        • obj.dtypes - DF의 컬럼별 데이터 타입
        • obj.info() - DF 정보 요약 인쇄
        • obj.ndim - 차원
        • obj.shape - 차원 정보 tuple
        • obj.size - 객체 요소 개수
        • obj.memory_usage() - 메모리 사용 byte
        • obj.dtype - .values 에 대한 데이터 타입
        • obj.nbytes - .values의 총 바이트 수 반환
        • df.count()
        • df.value_counts() - df 유니크한 값들 개수
      • 파일 읽고 쓰기
        • read_csv(filename)
        • to_csv(path_of_buf)
        • to_excel(name, sheet_name)
      • 복사
        • df/sr.copy(deep=False) - 얕은 복사
        • i.copy(name, deep, dtype) - index 복사
        • df/sr.astype(dtype, copy, erros) - dtype 을 변경하여 복사본(copy=True) 반환
          • upcasting 시 괜찮지만 불가능할 시 valuer error 발생, errors='ignore' 키워드 전달시 변경 가능한 type만 변경
          • df1 = df.astype(object, errors='ignore')
          • x={'age': np.int8, 'height':np.int16'}; df = df.astype(x) 로 여러개 한 번에 가능
        • i.astype(dtype, copy)
      • 생성자
        • Series
          • pd.Series(data, index, dtype,name,copy..)
            • data = sr.values, index와 수 동일, scalr일 경우 broadcasting
            • index 생략시 rangeindex로 대체
            • 중복 참조 방지를 위한 copy=True
        • DataFrame
          • pd.DataFrame(data, index, columns, dtype, copy...)
            • copy- data 가 ndarray 일 경우 복사 여부 (다중 참조 방지)
            • dict 타입
              • df = pd.DataFrame({'A':['kim','lee'], 'B':['asdf','sdf'] } )
              • -> col A,B, idx 0,1,
            • ndarray 타입
              • df=pd.DataFrame([[1,2,3],[4,5,6]], index=[0,1], columns=['A','B'])
              • -> col A,B, idx 0 ,1, 123, 456 생성
            • df 타입
              • df=pd.DataFrame(df, columns=['A', 'B','C'], index= [0,1,2])
              • df에서 label 기반으로 abc, 012에 맞게 데이터 넣어줌 + 없는 label 은 NaN으로 채워줌
        • Index
          • pd.Index(data,dtype,name..)
            • data - I.values 값(1D array-like)
            • pd.RangeIndex(start,stop,step,name)
              • int64Index 메모리 절약을 위한 특수한 타입
            • pd.date_range(start,end,periods, freq)
              • DatatimeIndex객체
              • 시작일~ 종료일 or 시작일 + periods(전체 기간), freq = 시간 주기 지정 default = 'D'
              • pd.date_range('2000-01-01', '2000-1-3', freq= '1H') -> 1시간 간격, 날짜 형식은 통상적으로 사용하는거면 상관 없음('01-31-2000' 등)
              • indexing - s['2000-01'] 하면 2천년 1월에 해당하는 날짜 모두 나옴(오우 굿ㅋ)
      • Format 변환
        • to_list, to_excel 등 검색 ㄱ
      • index 및 name 변경
        • df.rename(mapper, axis,index,columns,copy,inplace,errors)
          • mapper - {컬럼명: 변경 후} + axis
          • index, columns 에 함수 사용 가능
          • inplace = True 일 경우 copy 무시되며 모두 원본
          • inplace = False, copy= False 면 values 원본 copy=True면 전부 복사본
        • sr.rename(index, axis, copy, inpllace, errors)
          • sr.set_axis 로 index 변경 가능
        • i.rename(name, inplace)
        • df.add_prifix() || df.add_suffix()
          • 앞이나 뒤에 글자 추가 가능(column only)
        • df.set_index(keys, drop, append, inplace)
          • 지정한 컬럼을 index로 지정, multi index가능
          • drop=True 일경우 지정된 column index 설정 후 삭제
          • append = True 일 경우 multi index
        • df/sr.reset_index(level, drop, inplace)
          • index 를 column으로 이동
          • level은 multi index일 경우 사용, drop=True면 열로 추가 안됨
        • df.reindex(labels, index, columns, axis,fill_value...)
          • labels 에 새로운 index설정 - 기존에 없는 거면 fill_value로 채워서 새로 추가
          • index, columns 면 label 별로 맞춰서 데이터 채워줌
        • df/sr.sort_index(axis, ascending,kind..)
          • 지정 축의 labels 를 정렬
        • df/sr.sort_values(by, axis, ascending...)
          • by- 정렬 기준 label 지정, list로 여러개 가능, 값으로 비교
          • 타입 다를시 안됨. axis=0이면 행 정렬
        • df.T || df.transpose()
          • transpose
      • 컬럼 추가
        • df.insert(loc columns, value, allow_duplicates)
          • loc 위치번호로 column 이름으로 value data 채워줌
          • df.columns.get_loc(label) 로 하면 직접 안구해도됨
        • df.assign(**kwargs)
          • 따옴표 쓰면 안됨
          • df.assign( grade=3, sex=['W','M'], avg= lambda x : x['tot']/2) 처럼
        • df.update(other, join, overwrite, filter_func..)
          • other = df or df로 변환가능한 거
          • overwrite true 면 모든 데이터 변경 false면 NA 데이터만 갱신
          • filter_func boolean array 반환함수
          • series를 넣을 경우, series 의 name = column label, series index = df.index
      • 컬럼 삭제
        • drop(labels, axis, index,columns,inplace..)
          • 삭제할 index나 column list
          • labels + axis=0 은 index와 마찬가지
        • drop_duplicates(subset, keep, inplace...)
          • 비교할 컬럼 label 과 유지할 행
          • 중복행 삭제
      • Missing Data 처리
        • pandas 에서는 기본적으로 np.nan을 사용
        • NA 제거
          • dropna(axis, how, inplace, thresh,...)
            • how = 'any'면 na 한개라도 있으면 삭제
            • thresh 3이면 na가 아닌게 3개 이상있어야 삭제 안함
          • fillna(value, method, axis)
            • method = 'bfill' , 'ffill' NA값 이전 or 이후 값으로 채움
            • dict {'B': -1, 'C':-2} 로하면 B컬럼은 na를 -1 로 c는 -2로 채움
          • replace(to_replace, value, inplace, regex,...)
            • list 식
              • df.replace([1,3], [-1,-2]) 일 경우 1->-1 , 3->-2 로 변경
            • dict 식
              • df.replace({'B':[1:-1, 3:-1}})
                • B컬럼 1->-1, 3->-1
              • df.replace('B':[1,3], 'C':[2,5]},-1)
                • B 컬럼에서 1,3 ->-1
              • df.replace({'B':3, 'C':1}, {'B':-2, 'C':-3})
                • B컬럼 3 -> B컬럼 -2
      • 필터링
        • 1.Indexing - 아래의 내용과 같음
        • 2.boolean array, user-defined function
          • df[ [True, False, ... ] ] => true만 행별로 추출 df
          • df[ df['sex'] == M ]
            • 연산결과가 boolean array형태의 'Series' 라서 index label 에 맞는 (True값) 행만 추출. df
          • ==(eq()), !=(ne()), >(gt()), <(lt()), >=(ge()), <=(le()), ~, &, |, ^
          • function 이름을 넣을시 df/sr[f2] df나 sr 자체가 전달됨
          • df['name'].str.contains('a|i')
            • bool array return
          • df.isin([values]) , df.isna(), df.notna()...
            • df 안에 values 있는지 여부 bool array로 반환
            • {'name':['kim'], 'age':[30,40]} 등 열별 가능
          • df.duplcated(subset,keep)
            • 중복되는 행 bool array로 반환
            • subset에 칼럼명, keep에 중복처리할 키워드
            •  
        • 3.method
          • 추출
            • query(expr, inplace)
              • df의 컬럼별 특정 행 추출
              • 조건식을 문자열로 전달
              • 파이썬 연산자도 사용 가능
              • class 등이 컬럼명일 경우 ` 사용해서 표시
              • 변수명 그대로 사용하고 싶을시 @붙여서 표시
              • column명은 ' 없이 사용
              • Nan 구분할때 'name!=name'사용-> nan은 비교연산 불가라 항상 위 식 결과가 true
          • 컬럼, 인덱스 추출
            • filter(items(label) , like, regex, axis)
              • 컬럼과 인덱스 필터링
              • df.filter('indexname=='asdf'')
              • df.filter('index== 'asdf''
          • 함수 적용, 추출
            • apply(func, args())
              • 함수 실행 결과에 따라 sr: sr/scalar , df: sr/df 반환
              • df일 경우 axis=0(default)면 컬럼 Series가 통째로 함수인자로 넘어감, sr일 경우 value들이 하나씩 넘어감( 한 단계 낮아졌다고 생각)
              • result_type 은 axis=1(columns) 일 때만 적용된다.
              • result_type= 'expand'
                • list-like results 를 df 로 컬럼 확장
                • 한번에여러컬럼 만들고 싶을 때
              • result_type= 'broadcast'
                • 원래 DataFrame 모양으로 br
              • args는 ( ) 로 묶어서 추가적으로 전달 혹은 keyword로 넘김
              • df['price'].apply('{:.2%]'.format)
                • 소수 두 자리까지 percentage로 표현
              • dict사용 불가( dic.get 으로 사용)
              • pandas 함수는 문자열'' 로 전달
            • applymap(func)
              • df 각 항에 함수 모두 적용 후 반환
            • map(arg, na_action)
              • dict도 가능(apply와의 차이점)
            • replace(arg)
              • dict도 가능
            • where(cond, other...)
              • cond 가 true 면 유지, false 면 other로 변경
              • boolean array 반환
              • np.where(cond, 참값,거짓값)
                • 참일때도 변환 가능
            • mask(cond, other...)
              • cond가 true 면 변경, false 면 other로 변경
              • boolean array 반환
      • Combining & merging
        • 컬럼 또는 행연결
          • concat(objs, axis, join, levels..)
            • axis=0이면 append와 동일
            • join = 'outer' 합집합 'inner' 교집합
        • 컬럼 병합
          • join(other, on, how, lsuffix,...)
            • 같은 index label 기준으로 병합, 컬럼 중복 불가
            • on ='colname' 설정시 L.join(R)에서 L의 해당 컬럼과 R의 인덱스를 맞춰서 합침
            • how = 'outer'설정시 합
          • merge(other, how, on, sufficex,..)
            • on으로 공통 컬럼명 지정
            • 여러개 매칭되는 경우 n*m의 조합을 모두 저장
        • 행연결
          • append(other, ignore_index,verify_integrity, sort)
            • 객체 행 끝에 other 추가한 새 객체 리턴
            • ignore_index -> index reset
            • verify_integrity -> index 중복 x
            • df/sr 연결시 같은 컬럼에 맞춰 행단위로 연결함
      • Reshape
        • MultiIndex
          • 계층구조로 이루어진 index 객체
          • level 0부터 부여, -1이 가장 하위
          • 다층일 경우 튜플 쌍으로 표현
          • pd.MultiIndex(levels[['A','B'],['X','Y']], codes[[1,1,0,0],[1,0,1,0]], names=['L1','L2'])
            • multi index level 0 name L1 = BBAA, level 1 name L2 YXYX
          • df.xs('Y', axis=1, level=1, drop_level)
            • multiindex 객체 인덱싱, key값으로 선택, drop_level=false면 self와 동일한 구조로 반환
        • 재구성
          • df.pivot(index, columns, values)
            • df에서 index와 columns 로 사용할 열 지정, values 값 채움(defalut는 multiindex 컬럼으로 구성)
            • columns 의 unique 값들이 column 으로 채워지므로, 여러 열을 한 번에 묶어서 전달하면 된다.
          • df.melt(id_vars, value_vars, var_name,..)
            • 컬럼으로 되어있는 값들을 행으로 재구성
            • id_vars 제외한 나머지 행들 다 합치기 or value_vars[ ' ',...] 지정하여 데이터화 시키기, var_name으로 이름 지정, value_name으로 value 컬럼이름 지정
          • stack(level), unstack(level, fill_value)
            • stack = 컬럼 -> 인덱스
            • unstack = 인덱스 -> 컬럼
            • level default = -1 가장 밑에 추가
            • 컬럼명 지정 혹은 level 지정
      • 집계
        • Pivot Table
          • 원하는 인덱스와 컬럼, 값들로 func를 적용하여 새로운 df 생성
          • df.pivot_table(index, columns, values, aggfunc)
            • aggfunc 의 결과를 col로 반환하지만 index 나 columns 에 쓰인 열을 같이 쓸 수 없다.
            • aggfunc가 dict {'grade': 'count'} 같은 형태일 때, grade 가 멀티 인덱스로 구성되므로 droplevel을 붙여서 떼어주면 좋다.
        • Group by
          • 원하는 기준으로 그룹화, gb객체 반환
          • Splitting -> Applying -> Combining
          • df/sr.groupby(by, axis, level,sort,as_index...)
            • df.groupby(['class','name'])
              • class, name 멀티인덱스로 구성
            • df.groupby(lambda x: '1~6' if x<7 else '7~12')
              • index가 숫자일 때 그룹key로 반환
            • df.groupby({1:'G1', 2:'G2'..})
              • 인덱스 1이면 G1그룹
            • df.groupby(list or ndarray)
              • 선택한 축과 길이가 동일해야함 -> transform 활용
              • 레벨, 이름 혼용 불가 -> df.groupby([pd.Grouper(level=0), 'mode'])
          • groupby method
            • gb.groups - dict객체 반환
            • gb.get_group(key)- key에 해당하는 df or sr 반환
            • gb.first(), last(), nth(n) - 추출
            • gb.size() - 집계
          • groupby 집계 method
            • describe, min, max, ...
            • gb.apply(func,...)
              • 집계 메서드에 없는 기능의 함수 적용, 그룹별 df/sr 받음
            • gb.agg(func,...)
              • 컬럼별로 다른 함수 적용, df/sr 반환, 그룹별 df/sr 받음
            • gb.transform(func,...)
              • 원본과 동일한 크기로 결과 반환
              • 그룹별 함수 적용, 그룹별 df/sr/ 받음
              • fillna에 Series로 전달해서 index 맞춰서 채우는 용도로도 사용
            • gb.filter(func, dropna=True)
              • 그룹별 필터링해서 소그룹 추출
              • gb에 저장된 인덱스로 접근해 DF 새로 구성해 반납
    • Indexing
      • []
        • Series
          • sr[위치번호, label], sr[[1,2,..or 'a','b']]
            • 숫자형 label은 숫자로 쳐야함
          • sr[:] || sr[::]
            • 위치번호, label 둘 다 가능 label일 경우 [] 위치 번호일 경우 [)
        • DataFrame
          • df[] || df[['a','b','c'...]]
            • column label (번호 x)
          • df[:] || df[::]
            • row label or 번호 (쓰지말자 헷갈려)
          •  
      • loc[] || iloc[]
        • loc 은 label , iloc 은 idex 기반
        • : 전부, single index, list, slicing 가능
        • df.loc[r_idx, c_idx] c_idx 생략가능
        • loc 으로는 새로운 row,col 명으로 생성 가능 but iloc으로는 불가능
      • Boolean indexing
        • Boolean vector 로 필터링하여 추출, 혹은 Boolean 형태의 Series 로 인덱싱
        • df[[False, True,...]]
        • df[ df['sex'] == 'M' ]
        • df.loc[ lambda x : x['sex'] == 'M' ]
        • str.contains, str.endswith, str.startswith...
        • isin([ ... ] )
          • values 포함 여부 boolean array 반환
        • all(), any(),
        • duplicate() -> 중복 행 True 표시
        • isna(), notna(),
    • 문자열처리
      • series에 담긴 문자열 집합을 처리하는데 사용
      • sr.str.match(regex)
        • 정규식 일치 여부
      • sr.str.findall(regex)
        • 일치하는 패턴/정규식의 목록 리스트 반환
      • sr.str.cat(sep=' ')
        • 지정한 구분 기호로 연결
      • sr.str.replace(to_replace, value)
        • to -> value로 치환
      • sr.str.extract(regex)
        • 정규식 캡쳐 크룹을 DF로 추출
      • sr.str.startswith(), sr.str.endswith()
        • 시작하는 문자열 끝나는 문자열
      • 그 외 python 문자열과 유사
  • 정규식(Regular Expression , Regex)
    • 메타 문자
      • . -> 문자 한 개(\n 제외)
      • ^x -> 문자열 시작이 x
      • x$ -> 문자열 끝이 x
      • x* -> x 0번 이상
      • x+ -> x 1번 이상
      • x? -> x 가 0 or 1
      • x{n} -> x n번이상, x{n, k} -> n번이상k번 이하
      • [abc] -> abc 중 하나 [a-zA-Z] 알파벳 전부
      • (x) 그룹화
        • 그룹화 번호마다 숫자가 붙어서 \1 로 사용
        • r'(\w)\w\1'
          • aba 처럼 첫번째꺼 마지막에 오게
        • (?:x) 하면 패턴은 검사하나 캡쳐 x (번호 x)
        • (?P<name>..) 그룹화하고 내용 캡쳐 후 그룸의 이름 지정
        • (?P=name) 하면 저장한 이름 문자열 검색
      • \x -> 특수문자 x 를 일반 문자로 \( -> '('
        • 특수 시퀀스 문자(축약형 문자)
          • \d -> 숫자 한 개, \D -> \d 아닌 문자
          • \w -> 숫자+문자+_ -> \W \w 아닌 문자
          • \s -> white space -> \S \s 아닌 문자
          • \b -> 단어 경게 -> \B 비단어 경계 r'\b사람\b' 로 할 경우 사람 단어 따로 있는거 찾음
    • pandas 에서 처리 .str 접근자
      • s.str.match('.+(.com)$')
      • findall
      • cat
      • replace
      • extract -> df로 만들어줌
  • 시각화
    • matliblib.pyplot을 이용할 수도 있고, pandas 를 이용할 수도 있음
    • df.plot(kind='bar'..)
    • plt.pie(data, autopct='%1.1f%%' 소수점 1자리까지, explode=[] 가운데에서 떨어진정도, wedgeprops={'width':0.5} 가운데 텅빔)
    • r2.style.background_gradient(cmap='summer') - 2차원 시각화 html
  • 범주형 Categorical data
    • 몇 개의 종류로 나눠지는 데이터[ 'a', 'b', 'c'] -> [0, 1, 2] -> 메모리 절약
    • 카테고리간 우열 있을 시 비교 연산 가능
    • .cat 접근자
      • cat.codes - 매핑된 코드 시리즈로 반환
      • cat.categories - items를 확인하거나 수정
      • cat.as_ordered(), cat.as_unordered() - 논리정렬/해제
      • cat.set_categories(new, ordered=False) - 새범주로 추가, 제거, 재정렬
      • cat.reorder_categories() - 재정렬
      •  
    • 객체 생성
      • pd.Categorical(values, categories, ordered)
        • values - data
        • categories 로 카테고리 설정, 생략시 오름차순 정렬하여 자동 생성(unique value로 )
      • pd.cut( x(1darraylike) , bins, right, labels)
        • 숫자 데이터를 카테고리화
        • right ( (a,b], True default)
        • li=['bad,'good','best']
        • df['bins'] = pd.cut(df['exam'], bins=3, labels=li) - 3구간으로 (최소, 최대 균일 분할)
        • b = [-1,10,20,30] , bins=b일 경우 -1<x<=10, 10<x<=20, 20<x<=30 구간으로 구분
      • pd.qcut()
        • 균등 개수로 분할
      • pd.crosstab(index, columns ,...)
        • groupby 대상 지정 후 unique value로 df 구성, 단 columns 는 category 타입
        • cut = pd.cut(df['age'], bins=b, labels=l)
        • df['age'].groupby(cut).agg(['count', 'max'])