pandas_2, 정규식

ianman99 ㅣ 2024. 2. 4. 19:25

import pandas as pd

# xlsx 파일 읽기
raw = pd.read_excel('product.xlsx', engine="openpyxl")

print(raw)

# 새 변수 만들기 방법1
raw['부가세포함'] = raw['판매가'] * 1.1

# 새 변수 만들기 방법2
def 함수(a):
  return a * 1.1
raw['부가세포함'] = raw['판매가'].apply(함수)

# 만약 상품목록 데이터가 7102 Metal Chair 라면 의자를 카테고리 변수에 저장
def 함수2(a):
  if a == '7102 Metal Chair':
    return '의자'

raw['카테고리'] = raw['상품목록'].apply(함수2)

# 정규식
import re

a = re.search('abc', 'abcdef') # abcdef 에 abc가 포함되어 있으면 TRUE를 반환
print(a)

# 만약 상품목록 데이터가 Chair 를 포함한다면 의자를 카테고리 변수에 저장
def 함수2(a):
  if re.search('Chair', str(a) ): # pandas로 오픈한 자료의 문자 데이터가 string이 아닌 object인 경우가 있어 문자 데이터로 변환 후 검사
    return '의자'

raw['카테고리'] = raw['상품목록'].apply(함수2)


# abcdefg에 abc가 포함되어있으면 찾은 것을 리스트로 반환 실패하면 빈리스트 반환
re.findall('abc', 'abcdefg')

# 문장의 시작과 끝 검사
결과 = re.findall('^a', 'abcdefg') # a로 시작하는지
print(결과)

결과 = re.findall('g$', 'abcdefg') # g로 끝나는지
print(결과)

# 특수문자 포함여부 검사
결과 = re.findall('\$', 'abc$def$g') # $는 문장의 끝을 의미했으므로 \를 쓰고 $를 사용해야 $를 문자로 인식
print(결과)

# or 검사
결과 = re.findall('[abc]', 'abcdefg') # [] 안에 쓰면 a or b or c 가 포함된 글자를 찾아라 라는 뜻
print(결과) # 같은 단어단위로 or를 사용하고 싶다면 대괄호를 사용하지 않고 abc|def 이런 식으로 사용

# 문자 범위 지정하여 검사
결과 = re.findall('[a-zA-Z]', 'abcdefgHIJK') # 한글은 [가-힣]
print(결과)

# not 문법 사용하여 검사
결과 = re.findall('[^a-z]', 'abcde12345 안녕하세요') # a-z가 아닌 것을 찾아라
print(결과)

# 숫자, 공백 검사
결과 = re.findall('\d\d', 'abcde12345 안녕하세요') # \d는 한자리 숫자 \d{3}은 세자리 숫자
print(결과)

결과 = re.findall('\s', 'abcde12345 안녕하세요') # \s 는 공백 \S 는 공백이 아닌 모든 것
print(결과)

# 반복되는 문자 찾기
결과 = re.findall('ㅋ', '안녕하세요ㅋㅋㅋㅋㅋㅋ') # ㅋ 하나만 찾음
print(결과)

결과 = re.findall('ㅋ+', '안녕하세요ㅋㅋㅋㅋㅋㅋ') # 반복되는 ㅋ를 통째로 찾음
print(결과)

# 대소문자 무시하고 검사
결과 = re.findall('abc', 'ABcdefg', re.IGNORECASE)
print(결과)

# 찾아서 바꾸기
결과 = re.sub('\-', '.', '2022-1-1') # re.sub(이걸, 이렇게 바꿔, 이 문자에서)
print(결과) # -는 특수문자이므로 \와 함께 사용


# 문자가 포함되어 있으면 TRUE 아니면(숫자만 있으면) ERROR를 반환
def 함수(a):
  if re.search('\D', str(a)) :
    return a
  else :
    return '에러'

raw['카테고리'] = raw['카테고리'].apply(함수) # 덮어씌우기












'Python' 카테고리의 다른 글

주식 일별종가_(t+1, t+2, ... 형식)  (3) 2024.02.07
yfinance 주가 데이터 가져오기  (2) 2024.02.04
pandas_1  (1) 2024.02.04
파이썬 메일 전송  (1) 2024.02.03
크롤링 방지 우회  (2) 2024.02.03