[Pandas] applymap() - DataFrame 전체 셀에 함수를 적용
·
python/Pandas | Numpy
Pandas를 사용하다 보면 다음과 같은 작업이 필요할 때가 있습니다.모든 수치에 단위를 붙이고 싶을 때전체 셀의 포맷을 문자열로 바꾸고 싶을 때결측값을 특정 텍스트로 대체하거나, 셀에 조건 기반 포맷팅을 하고 싶을 때이럴 때 DataFrame 전체 셀에 함수를 적용할 수 있는 applymap() 이 강력한 도구가 됩니다. 먼저 예제 데이터를 확인하겠습니다. 예제 데이터import pandas as pdimport numpy as npdf = pd.DataFrame({ 'math': [90, 80, 70], 'eng': [85, 75, 65], 'sci': [88, 78, np.nan]})기본 문법DataFrame.applymap(func)각 셀에 대해 func(value) 를 수행반환 ..
ValidationError – API/Form 검증
·
python/Django
API 개발하면서, Form이나 API Serializer를 통해 입력 값을 검증해야합니다. 근데 사용자가 잘못된 데이터를 보내거나, 빠뜨리거나, 이상한 형식으로 보내면 ValidationError가 발생합니다.rest_framework.exceptions.ValidationError: 문제는, 서버에서 ValidationError를 제대로 잡지 않으면 500에러가 발생하고, API 클라이언트(앱/프론트앤드)에서는 "서버 오류" 처럼 오해할 수 있습니다. → 사용자 탓인데 서버 오류처럼 보이게 되는 셈이죠. 원인 분석Django Form, ModelForm, DRF Serializer 모두 내장 검증(validation) 기능을 가지고 있습니다.이 검증 과정에서 문제가 발생하면 ValidationErr..
IntegrityError – 대량 저장 중 충돌 해결
·
python/Django
개발을 하다가 대량의 데이터를 한꺼번에 저장하는 기능이 필요한 적이 있었다. Django ORM의 bulk_create()를 이용해 수천 건을 한 번에 insert하려고 했는데, 간헐적으로 IntegrityError가 발생하면서 작업에 실패했었다. 특히,Primary Key가 수동으로 지정되는 경우Unique 제약조건이 걸린 필드가 중복되는 경우ForeignKey로 연결된 테이블에 없는 값이 들어오는 경우원인 분석bulk_create()는 내부적으로 INSERT INTO ... VALUES (), () ... 식으로 한 번에 SQL을 보낸다.트랜잭션을 걸지 않으면 한 레코드라도 오류 나면 전체가 실패한다.트랜잭션을 걸어도, IntegriryError가 발생하면 모든 데이터가 롤백된다. 즉,데이터가 하나라..
[Pandas] map() (조건 라벨링, 값 변환, 딕셔너리 매핑까지 Series 변환의 핵심)
·
python/Pandas | Numpy
map()은 Pandas에서 **단일 열(Series)**의 값을 변환할 때 가장 직관적이고 빠르게 사용할 수 있는 함수다.아래와 같은 상황에서 특히 유용하다:숫자를 등급으로 변환하고 싶을 때특정 키워드를 다른 텍스트로 바꾸고 싶을 때조건 기반 라벨링을 한 줄로 하고 싶을 때단일 열에만 함수 적용이 필요한 경우 예제 데이터import pandas as pddf = pd.DataFrame({ 'score': [95, 82, 67, 74, 59], 'gender': ['M', 'F', 'F', 'M', 'M']}) 기본 문법Series.map(func_or_dict) func_or_dict: 함수, 딕셔너리, Series 가능반환값은 Series1. 예제: 숫자 점수를 등급으로 변환 (함수 기반..
[Pandas] explode() (리스트가 들어있는 셀 행마다 분해)
·
python/Pandas | Numpy
데이터를 다루다 보면 한 셀에 리스트나 튜플 형태로 여러 값이 들어 있는 경우가 많다.예를 들어:상품 태그: ['전자제품', '스마트폰']사용자가 선택한 옵션 목록: ['블랙', '128GB']JSON 데이터를 Pandas로 파싱했더니 list가 그대로 들어옴이런 경우, 분석을 하려면 반드시 각 항목을 행 단위로 분해해야 한다.explode()는 바로 이런 상황을 위해 탄생한 함수다. 예제 데이터import pandas as pddf = pd.DataFrame({ 'user_id': [101, 102, 103], 'tags': [['A', 'B'], ['C'], []]})기본 문법df.explode(column, ignore_index=False) column: 리스트가 들어있는 컬럼igno..
[Pandas] eval() (열 간 수식을 짧고 빠르게 처리)
·
python/Pandas | Numpy
여러 열을 계산해서 새로운 값을 만들고 싶을 때, Pandas에서는 다음과 같이 df['A'] + df['B'] 식으로 연산을 한다.하지만 열 이름이 길거나 계산이 많아지면 가독성이 떨어지고, 성능도 비효율적이다. eval()은 수식을 문자열처럼 입력하면 Pandas 내부에서 빠르게 처리해주는 함수다.특히 속도와 코드 가독성이 중요한 실무 상황에서 진가를 발휘한다. 예제 데이터import pandas as pddf = pd.DataFrame({ 'math': [90, 80, 70], 'eng': [85, 75, 65], 'sci': [88, 78, 68]}) 기본 문법df.eval('새_컬럼명 = 수식', inplace=False) 수식: 문자열로 작성 ('col1 + col2')inp..
[Pandas] query() (loc보다 더 깔끔하게 조건 필터링)
·
python/Pandas | Numpy
Pandas의 조건 필터링은 기본적으로 df[(조건)] 형태를 사용하지만,조건이 복잡해질수록 &, |, 괄호가 난무하면서 코드가 길어지고 가독성이 떨어진다.이때 query()는 마치 SQL의 WHERE절처럼 사용할 수 있어 코드를 간결하게 정리해준다. 예제 데이터import pandas as pddf = pd.DataFrame({ 'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'], 'age': [25, 32, 40, 28, 35], 'score': [88, 92, 85, 70, 91], 'membership': ['basic', 'premium', 'basic', 'basic', 'premium']})1. 예제 단일 조건 필터링df.que..
[Pandas] filter()
·
python/Pandas | Numpy
데이터 전처리나 EDA(탐색적 데이터 분석)를 하다 보면 다음과 같은 일이 자주 있다:컬럼이 너무 많은데, 이름에 'score'가 들어간 것만 추출하고 싶다'2023'으로 시작하는 행(index)만 뽑고 싶다복잡한 조건이 아니라 이름 기반으로만 간단히 필터링하고 싶다이럴 때 Pandas의 filter() 함수는 가볍고 직관적인 선택 도구가 되어준다.예제 데이터import pandas as pddf = pd.DataFrame({ 'user_id': [1, 2, 3], 'score_math': [90, 80, 70], 'score_eng': [85, 75, 65], 'score_sci': [88, 78, 68], 'age': [25, 30, 35]}, index=['2022_A',..
[Pandas] 조건 조합 필터링 및 추출
·
python/Pandas | Numpy
실무에서는 단순히 “age가 30 이상” 같은 조건이 아니라,“30대 이상이고 점수가 85점 이상이며, 가입일이 2023년 이후이고, 결측치는 제외” 같은 복합적인 조건이 붙는다. 예제 데이터import pandas as pdimport numpy as npdf = pd.DataFrame({ 'user_id': [1001, 1002, 1003, 1004, 1005], 'age': [25, 32, 40, np.nan, 29], 'score': [88, 92, 85, 70, np.nan], 'signup_date': ['2022-12-15', '2023-01-10', '2023-02-20', '2023-03-01', '2023-01-25'], 'membership': ['basi..
[Pandas] 데이터 타입 확인 및 변환 – dtypes, astype()
·
python/Pandas | Numpy
실제 데이터를 다루다 보면 이런 경험, 한 번쯤 해봤을 것이다:숫자인 줄 알았는데 문자열(object)이라 연산이 안 된다날짜인 줄 알았는데 그냥 문자열이라 정렬이 이상하게 나온다정수로 보여도 float64라 데이터 저장 용량이 크다이처럼 Pandas에서 데이터 타입이 올바르지 않으면 연산 오류, 성능 저하, 분석 왜곡 등 수많은 문제가 발생할 수 있다. 예제 데이터import pandas as pddf = pd.DataFrame({ 'user_id': ['1001', '1002', '1003'], 'age': ['25', '30', '35'], # 문자열로 들어온 숫자 'score': [88.0, 92.5, 85.0], 'signup_date': ['2023-01-01..