Python 308

[Python] Pandas - 문자열 컬럼 분할 및 다중 컬럼 추가

개요 데이터를 전처리하다 보면 문자열 컬럼을 분할하여 컬럼을 여러 개 추가해야 하는 경우가 많다. 이 글에서는 아래 데이터를 이용해 주소 컬럼을 분할해 도시와 구로 추가하는 방법을 몇 가지 정리한다. df = pd.DataFrame( {"이름":["A", "B", "C", "D"], "나이":["10", "15", "42", "22"], "주소":["서울;강동구", "인천;연수구", "안양;동안구", "부산;수영구"]} ) 반복문 DataFrame 인덱서를 이용해 반복적으로 셀에 접근하여 데이터를 처리하는 방식이다. for i in df.index: df[['도시', '구']] = df.loc[i, '주소'].split(';') 데이터양이 적을 때는 사용해도 괜찮지만, 반복문으로 처리하기 때문에 데이터양..

[Python] 여러 구분자로 문자열 자르기

개요 "100-200*300-500+20" 위와 같은 문자열이 있다고 했을 때, 숫자 값만 저장하고 싶다. 구분자가 -, *, + 와 같이 여러 개일 때 자르는 방법을 정리한다. 구분자 통일 replace 함수를 이용해 여러 구분자를 한 가지로 치환한다. data_val = "100-200*300-500+20" # 구분자 통일 data_val = data_val.replace('*', '-').replace('+', '-') # 문자열 분할 list_val = data_val.split('-') print(data_val) print(list_val) re.split 정규식을 다룰 때 사용하는 re 모듈에도 split 함수를 지원한다. re.split 함수에 구분자 패턴과 분할할 문자열을 지정하여 사용한..

Python 2023.01.24

[Python] 리스트 랜덤 추출 (샘플링)

개요 리스트 내 요소를 무작위로 추출하는 방법에 대해 알아본다. random Python 표준 라이브러리로 의사 난수 생성기를 구현한다. 별도 설치 없이 import 하여 사용할 수 있다. import random 하나만 추출 random.choice 함수를 리스트 내 임의의 요소 하나를 반환한다. 다만 매개변수로 전달한 리스트가 비어있으면 IndexError를 발생시킨다. random.choice(range(10)) # 실행 결과 7 중복 허용하면서 여러 개 추출 random.choices 함수는 리스트 내 k개의 요소를 선택해 리스트로 반환한다. 선택 시 값 중복을 허용한다. random.choices(range(10), k=5) # 참고 문서 [8, 8, 2, 2, 0] Python 3.6부터 지원..

Python 2023.01.22

[boto3] S3 Select - OverMaxRecordSize 에러 대안

개요 아래와 같이 S3 Select 기능을 이용해 S3 버킷에 저장된 GZIP으로 압축된 JSON 데이터의 내용을 읽어 들이려고 한다. import boto3 client = boto3.client('s3') response = client.select_object_content( Bucket=bucket, Key=obj_key, Expression='SQL', ExpressionType='SQL', InputSerialization={ 'CompressionType': 'GZIP', 'JSON': { 'Type': 'LINES' } }, OutputSerialization={ 'CSV': {}, }, ) for event in response.get('Payload'): if 'Records' in e..

Python 2023.01.21

[Python] Pandas - DataFrame 문자열 변환

개요 DataFrame 내용을 Slack이나 MS Teams Webhook으로 알람을 보내는 등의 이유로 DataFrame을 문자열로 변환하고자 한다. to_string DataFrame을 콘솔 친화적인 형식으로 렌더링 한다. 예로 들어 titanic 데이터세트를 출력하면 아래와 같다. import numpy as np import pandas as pd import seaborn as sns titanic = sns.load_dataset("titanic") titanic to_string 함수를 사용해서 문자열로 렌더링 하면 다음과 같다. 주피터 노트북에서는 문자열로 렌더링 한 DataFrame은 print 함수로 출력하는 게 보기 편하다. print(titanic.to_string()) 인덱스 빼고..

[Python] Pandas - 반복문으로 DataFrame 합치기

개요 이 글에서는 같은 구조의 DataFrame을 반복적으로 만든 뒤, 하나의 DataFrame으로 합치는 방법에 대해 정리한다. DataFrame을 합치는 방법으로는 concat, merge, append, join 등의 함수가 존재한다. 다만 기준 열을 이용해 합치는 것이 아니라 단순히 세로로 데이터 연결을 하고자 하므로 이 글에서는 concat과 append를 살펴볼 것이다. 아래 데이터를 예시로 정리한다. import numpy as np import pandas as pd import seaborn as sns titanic = sns.load_dataset("titanic") append 행 끝에 다른 행을 추가한 새 DataFrame을 반환한다. 추가할 DataFrame의 인덱스를 무시할 때..

[Python] Pandas - DataFrame NaN 포함 행 제거

개요 DataFrame을 저장할 때 NaN을 포함한 행은 제외하고 저장하고자 한다. 아래 데이터를 예로 들어 방법을 정리한다. import numpy as np import pandas as pd import seaborn as sns planets = sns.load_dataset('planets') planets 데이터 확인 df.info 함수를 이용해 DataFrame에 저장된 데이터의 정보를 간단히 살펴본다. info 함수를 이용하면 객체의 타입, 인덱스 길이와 범위, column의 이름과 데이터 타입, 그리고 결측값이 아닌 데이터의 개수 등의 정보를 확인할 수 있다. planets.info() # 실행 결과 RangeIndex: 1035 entries, 0 to 1034 Data columns ..

[Python] Pandas - DataFrame 컬럼 순서 변경

개요 DataFrame으로 데이터를 추가하다 출력할 때가 되면 데이터를 추가한 순서가 보기 편한 순서와 달라 데이터가 눈에 잘 안 들어오는 경우가 있다. 아래의 데이터를 예시로 들어 DataFrame의 컬럼 순서를 변경하는 방법을 정리해둔다. import seaborn as sns titanic = sns.load_dataset("titanic") titanic 컬럼 나열 원하는 순서로 컬럼을 다시 나열하여 인덱싱 한다. df.columns 속성을 이용하면 필요한 컬럼을 빠트리지 않을 수 있다. titanic.columns # 실행 결과 Index(['survived', 'pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'embarked', 'class', 'who..

[Python] 빈 DataFrame 생성 / 확인

개요 DataFrame을 다루다보니 빈 DataFrame을 생성하거나 DataFrame이 비어있는지 여부를 확인해야 하는 경우가 있었다. 방법을 간단히 정리해둔다. 빈 DataFrame 생성 DataFrame을 생성할 때는 컬럼과 데이터를 딕셔너리로 정의해서 생성자로 전달했다. 다만 빈 DataFrame을 생성할 때는 데이터 없이 생성자를 호출하면 된다. df = pd.DataFrame() print(df) # 실행 결과 Empty DataFrame Columns: [] Index: [] 컬럼이 있는 빈 DataFrame 생성 데이터는 없지만, 컬럼을 지정하여 DataFrame을 생성해야 할 때는, columns 매개변수로 컬럼 이름만 전달한다. df = pd.DataFrame(columns=['날짜']..

[Python] Pandas - 시계열 자료 다루기 3

dt datetime 자료형을 다룰 때는 dt 접근자를 이용해 datetime 자료형이 가진 속성과 메서드를 사용할 수 있다. 아래의 데이터를 예로 들어 정리한다. s = pd.Series(pd.date_range("2020-12-25", periods=100, freq="D")) s # 실행 결과 0 2020-12-25 1 2020-12-26 2 2020-12-27 3 2020-12-28 4 2020-12-29 ... 95 2021-03-30 96 2021-03-31 97 2021-04-01 98 2021-04-02 99 2021-04-03 Length: 100, dtype: datetime64[ns] 년, 월, 요일 정보 얻기 dt 속성을 통해 year, month, day, weekday 정보를 얻..