[Pandas] 7-9

Sooyeon·2023년 10월 15일
0

문제풀이 

목록 보기
3/95
post-thumbnail

[Pandas] 7-9
1.판다스 자료형
2.문자열 처리하기
3.apply 메서드 활용

1. 판다스 자료형


1-1.자료형 다루기

자료형 변환하기

  • 자료형을 자유자재로 변환하기 - astype 메서드

여러 가지 자료형을 문자열로 변환하기

잘못 입력한 데이터 처리하기

  • 잘못 입력한 문자열 처리하기 -to_numeric 메서드

=> total_bill형이 실수가 아니라 문자열임을 알수 있다. 'missing'이라는 문자열 때문에 이런 문제 발생

  • astype 메서드로 'total_bill'열의 데이터를 실수로 변환하면 오류 발생
    =>판다스는 문자열을 실수로 변환하는 방법을 모르기때문

  • to_numeric 메서드사용

=>비슷한 오류 발생

✳️ to_numeric 메서드를 사용해도 문자열을 실수로 변환할 수 없다.
to_numeric 메서드는 error인자에 raise,coere,ignore를 지정하여
오류를 어느 정도 제어할 수 있다.
errors 인자를 raise로 설정하면 숫자로 변환할 수 없는 값이 있을때만 오류 발생.

✳️ errors 인자에 설정할 수 있는 값
-raise:숫자로 변환 할 수 없는 값이 있으므로 오류 발생
-coerce:숫자로 변환할 수 없는 값을 누락값으로 지정
-ignore:아무 작업도 하지 않음

  • errors인자를 ignore로 설정하면 오류가 발생하지 않지만 자료형도
    변하지 않는다. => 오류를 무시

=>여전히 문자열

  • errors 인자를 coerec로 설정하면 누락값으로 바뀜
    실수로 바뀜
  • downcast 인자는 정수,실수와 같은 자료형을 더 작은 형태로 만들때 사용
    downcast 인자에는 integer,signed,unsigned,float 등의 값으로 사용
    =>float64에서 float32로 바뀜
    만약 지정하는 실수의 예상 범위가 크지 않다면 다운캐스트하는 것이 좋다

1-2.카테고리 자료형

판다스 라이브러리는 카테고리라는 특수한 자료형이 있다.

  • 카테고리: 유한한 범위의 값만을 가질 수 있는 자료형
    ex)만약 10종류의 과일 이름을 저장할 열이 있다면, 문자열 자료형보다는
    카테고리 자료형을 사용하는 것이 용량과 속도 면에서 효율적임
  • 카테고리 자료형의 장점과 특징
    -용량과 속도 면에서 매우 효율적
    -주로 동일한 문자열이 반복되는 데이터를 구성하는 경우에 사용

문자열을 카테고리로 변환하기
=> 카테고리라는 자료형은 데이터의 크기가 커지면 커질수록 진가발휘
데이터프레임의 용량이 줄어듬

2.문자열 처리하기


2-1.문자열 다루기

파이썬과 문자열
문자열은 작은따옴표나 큰따옴표로 감싸서 만든다.

word='grail'
sent='a scratch'

인덱스로 문자열 추출하기
문자열도 인덱스를 사용하여 추출할 수 있다.

문자열 추출하기

1 ) 문자열의 첫 번째 문자 추출

2 ) 인덱스 슬라이싱을 사용하면 여러 개의 문자를 한번에 추출

3 ) 음수를 사용해도 문자열을 추출할 수 있다. =>전체 문자열을 추출할때 음수를 사용하면 안됨.

전체 문자열 추출하기

1 ) 왼쪽 범위를 비우고 문자열 추출

2 ) 오른쪽 범위를 비우면 문자열의 마지막 위치까지 문자열 추출

3 ) 양쪽 모두 비우면 전체 문자열 추출

4 ) 문자열을 일정한 간격으로 건너뛰며 추출 :콜론 추가


2-2.문자열 메서드

문자열 메서드

- capitalize :첫 문자를 대문자로 변환
- count:문자열의 개수를 반환
- starswith:문자열이 특정 문자로 시작하면 참이 된다
- endswith:문자열이 특정 문자로 끝나면 참이 된다
- find:찾을 문자열의 첫 번째 인덱스 반환 ,실패 시 -1 반환
- index:find메서드와 같은 역할을 수행하지만,실패 시 ValueError 반환
- isalpha:모든 문자가 알파벳이면 참
- isdecimal:모든 문자가 숫자면 참
- isalnum:모든 문자가 알파벳이거나 숫자면 참
- lower:모든 문자를 소문자로 변환
- upper:모든 문자를 대문자로 변환
- replace:문자열의 문자를 다른 문자로 교체
- strip:문자열의 맨 앞과 맨 뒤에 있는 빈 칸을 제거
- split:구분자를 지정하여 문자열을 나누고,나눈 값들의 리스트를 반환
- partition:split 메서드와 비슷한 역할을 수행하지만 구분자도 반환
- center:지정한 너비로 문자열을 늘이고 문자열을 가운데 정렬
- zfill :문자열의 빈 칸을 '0'으로 채운다.

join,splitlines,replace메서드 실습하기

1 ) join 메서드

문자열을 연결하여 새로운 문자열을 반환하는 메서드

2 ) splitlines 메서드

여러 행을 가진 문자열을 분리한 다음 리스트로 반환

3 ) 인덱스 슬라이싱을 응용하면 특정 문자열만 가져올 수 있다.

4 ) replace 메서드


2-3.문자열 포매팅

문자열 포매팅은 문자열을 편리하게 출력할 수 있게 해주는 기능
=>즉, 출력할 문자열의 형식을 지정하거나 변수를 조합하여 출력하는 방법

문자열 포매팅하기

1 ) 단어를 삽입할 위치를 {}로 지정하고,format에 원하는 단어를 전달
{}를 플레이스 홀더라고한다.

2 ) 플레이스 홀더는 여러 번 사용해도 된다.
여러 단어를 전달할려면 인덱스 개념 응용

3 ) 플레이스 홀더에는 변수를 지정해도 된다.
단,format 메서드에 전달하는 문자열도 변수에 담아 전달해야 함

숫자 데이터 포매팅하기

1 ) 숫자 데이터도 플레이스 홀더를 사용할 수 있다.

2 ) 플레이스 홀더에 ",를 넣으면 쉼표를 넣어 숫자를 표현할 수 있다

3 ) 소수는 다양한 방법으로 포매팅 할 수 있다.

4.format의 0번째 값을 5자리의 수로 표현하되 0으로 채워 출력

%연산자로 포매팅하기

1 ) 삽입할 값이 10진수라면 값을 삽입할 위치에 %d라고 입력해야 한다.
그 다음 %연산자를 이용하여 삽입할 값을 지정하여 출력

2 ) 삽입할 값이 문자열이라면 값을 삽입할 위치에 %s라고 입력해야한다.


2-4.정규식으로 문자열 처리에 날개 달기

정규식이란

  • 정규식 표현 - 문법,특수 문자

1 ) 기본 정규식 문법

  • . : 문자 앞에 문자 1개가 있는 패턴을 찾는다
  • ^ :문자열의 처음부터 일치하는 패턴을 찾는다.
  • $ :문자열의 끝 부분부터 일치하는 패턴을 찾는다.
  • *:n이후 숫자가 0개 이상인 패턴을 찾는다
    • :n이후 숫자가 1개 이상인 패턴을 찾는다.
  • ? :?앞의 문자가 있거나 없는 패턴을 찾는다.
  • {m} :n이후 숫자가 m개 인 패턴을 찾는다.
  • {m,n} :n이후 숫자가 m개 이상, n개 이하인 패턴을 찾는다.
  • \ :*,?,+와 같은 특수 문자를 검색할 때 이스케이프 문자를 사용
  • [] : []중 1개를 포함하고 나머지 문자열이 []뒤 패턴을 찾는다.
  • | :a이나 b중 하나만 있는 패턴을 찾는다
  • (): ()에 지정한 패턴을 찾을 때 사용
.a
^I like
on$
n\d*
n\d+
apple? 
n\d{2}
n\d{2,4}
\*,\?,\+
[cfh]all
apple | application
(\d+)-(\d+)-(\d+)

2 ) 정규식 특수 문자

  • \d :숫자 1개를 의미한다 == [0-9]
  • \D :숫자 이외의 문자 1개를 의미 ==[^0-9]
  • \s:공백이나 탭 1개 의미
  • \S: 공백 문자 이외의 문자 1개 의미
  • \w:알파벳 1개를 의미
  • \W:알파벳 이외의 문자 1개를 의미 (한글,중국어)

3 ) 정규식 표현 - 메서드
정규식 메서드는 정규식 패턴을 사용하지 않아도 메서드를 호출하는 방법
=> 원하는 패턴의 문자열을 찾을 수 있도록 해줌

정규식 메서드

  • search:첫번째로 찾은 패턴의 양 끝 인덱스를 반환
  • match: 문자열의 처음부터 검색하여 찾아낸 패턴의 양 끝 인덱스 반환
  • fullmatch:전체 문자열이 일치하는지 검사
  • split: 지정한 패턴으로 잘라낸 문자열을 리스트로 반환
  • findall : 지정한 패턴을 찾아 리스트로 반환
  • finditer: findall메서드와 기능이 동일하지만 iterator를 반환
  • sub: 첫 번째 인자로 전달한 값을 두번째 인자로 전달한 값으로 교체

정규식으로 전화번호 패턴 찾기

  • match 메서드를 사용하여 길이가 10인 숫자를 확인하기
    pattern 인자에는 10개의 숫자를 의미하는 10개의 \d를,
    string에는 테스트용 문자열인 tele_num 전달
    만약 패턴을 찾으면 Match 오브젝트 반환
    Match오브젝트를 출력하면 span에는 찾은 패턴의 인덱스가,
    match에는 찾은 패턴의 문자열이 있는 것을 확인

  • bool 메서드에 m을 전달하면 True나 False얻을 수 있다.
    즉, match메서드가 반환한 Match오브젝트는 bool메서드로 t/f 판단
  • Match 오브젝트에는 찾아낸 패턴의 정보를 확인할 수 있는 다양한 메서드o
    start 와 end메서드: 첫번째와 마지막 인덱스 반환
    span 메서드: 찾은 패턴의 첫번째와 마지막 인덱스를 한번에 반환
    group메서드 : 찾아낸 패턴 반환
  • 전화번호를 입력하는 방법은 1234567890아 아니라
    123-456-7890 이나 123 456 789 같은 방법도 있다.
    =>앞에서 사용한 패턴을 적용하면 None을 출력 (패턴 찾지 못함)
  • 위의 문제를 해결하려면 정규식을 다시 작성해야 한다.
    다음과 같이 빈 칸을 의미하는 정규식 \s를 넣어 패턴을 다시 만든다
  • 지역 코드는 소괄호로 감싸고 나머지 번호는 반각 기호로 구분한 전화번호의 정규식은 다음과 같이 작성한다.
  • 국가 코드까지 있는 전화번호의 정규식은 다음과 같이 작성한다.

3.apply 메서드 활용


3-1.간단한 함수 만들기

제곱 함수와 n제곱 함수 만들기

# 제곱함수
def my_sq(x):
	return x**2

# n 제곱 함수 my_exp
def my_exp(x,n):
	return x**n


print(my_sq(4))
16
print(my_exp(2,4))
16

3-2.apply메서드 사용하기 -기초

시리즈와 데이터프레임에 apply메서드 사용하기

1 ) 시리즈와 apply 메서드=>실습에 사용할 데이터프레임 준비

2 ) 'a'열을 제곱하여 얻는 결괏값과 apply메서드를 적용한 결괏값 비교

3) 2개의 인자를 전달받아야 하는 n 제곱 함수와 apply메서드를 함께 사용
apply메서드의 첫번째 인자에는 n제곱 함수의 이름을 전달하고
두번째 인자에는 n제곱 함수의 두번째 인자를 전달
=>df['a']의 값이 my_exp 함수의 첫번째 인자로 넘어간다.

4 ) 데이터프레임과 apply 메서드=>데이터프레임 준비

=>1개의 값을 전달받아 출력하는 함수

=>데이터프레임에 함수를 적용해야 하기 때문에 axis값으로 열방향 혹은 행 방향으로 적용할지 정해야한다.

=>만약 axis값을 지정하지 않으면 열방향(0)으로 함수로 적용한다.

3개의 인자를 입력받아 평균을 계산하는 함수 사용

avg_3 함수를 apply메서드에 전달하면 3개의 인잣값을 필요로하는 함수인데 1개의 인잣값만 입력받았다는 오류 메세지 출력
=>avg_3 함수가 열 단위로 데이터를 처리할 수 있도록 수정해야 함


3-3.apply메서드 사용하기-고급

데이터프레임의 누락값을 처리한 다음 apply메서드 사용하기

1 ) 데이터프레임의 누락값 처리하기 -열방향

  • 누락값의 비율을 계산하는 prop_missing 함수

  • 누락값이 아닌 데이터의 비율
  • 데이터프레임의 누락값 처리하기 -행방향

  • 누락값이 2개 이상인 데이터를 추출한 것

0개의 댓글