학습 기록
Python 공부 기록 #12 - pandas로 원하는 데이터만 골라보기 (조건 필터와 빈칸 확인)
0. 목차
-
인트로: 표를 불러온 다음에는 뭘 해야 할까?
-
조건에 맞는 행만 고르는 방법
-
제목에 특정 단어가 들어간 데이터 찾기
-
빈칸이 있는 데이터 확인하기
-
여러 조건을 한꺼번에 적용하기
-
실무에서는 어디에 쓸 수 있을까?
-
삽질했던 부분들
-
아웃트로: Excel 필터를 Python 코드로 바꿔보기
-
1. 인트로: 표를 불러온 다음에는 뭘 해야 할까?
지난 글에서는 크롤링 결과 Excel 파일을 pandas로 불러오고, 필요한 열만 고른 뒤 날짜순으로 정렬해 봤습니다.
근데 실제 데이터가 많아지니까 표 전체를 보는 것만으로는 부족했습니다.
예를 들어 수집한 글 중에서 제목에 Python이 들어간 글만 보거나, 링크가 비어 있는 데이터만 확인하고 싶었습니다.
Excel에서는 열 위에 필터를 걸고 원하는 조건을 선택하면 됩니다. 매번 같은 조건을 눌러야 한다는 점이 조금 번거로웠고요.
찾아보니까 pandas에서는 조건을 코드로 적어서 필요한 행만 골라낼 수 있었습니다.
오늘은 크롤링 데이터에서 원하는 내용만 찾고, 빈칸이 있는 행을 확인하는 방법을 공부해 봤습니다.
2. 조건에 맞는 행만 고르는 방법
먼저 크롤링 결과가 저장된 blog_posts.xlsx 파일을 불러왔습니다.
import pandas as pd
df = pd.read_excel("blog_posts.xlsx")
print(df.head())
불러온 표에는 제목, 카테고리, 링크, 수집일 열이 있다고 가정했습니다.
이 중에서 카테고리가 코딩 공부인 행만 보고 싶다면 아래처럼 작성할 수 있습니다.
coding_df = df[df["카테고리"] == "코딩 공부"]
print(coding_df)
df["카테고리"] == "코딩 공부"는 각 행의 카테고리가 코딩 공부와 같은지 확인합니다.
그 결과를 다시 df[] 안에 넣으면 조건이 맞는 행만 남습니다.
대괄호가 겹쳐 보여서 처음에는 복잡했는데, **“카테고리가 코딩 공부인 행만 df에서 꺼낸다”**고 읽으니 조금 이해가 됐습니다.
3. 제목에 특정 단어가 들어간 데이터 찾기
이번에는 제목에 Python이라는 단어가 포함된 글만 찾아봤습니다.
python_df = df[
df["제목"].str.contains("Python", na=False)
]
print(python_df[["제목", "링크"]])
str.contains()는 텍스트 안에 원하는 단어가 들어 있는지 확인합니다.
na=False는 제목이 비어 있는 행을 조건에 맞지 않는 것으로 처리하겠다는 뜻입니다.
처음에는 이 옵션 없이 실행했는데 빈칸 때문에 오류가 났습니다. 빈칸 하나 때문에 코드 전체가 멈출 수 있다는 걸 여기서 알았습니다.
결과를 출력할 때는 제목과 링크 열만 골랐습니다. 필요한 정보만 나오니까 이거 되겠는데? 싶었습니다.
4. 빈칸이 있는 데이터 확인하기
크롤러가 정상적으로 실행돼도 일부 링크나 제목이 비어 있을 수 있습니다.
링크가 비어 있는 행만 확인하려면 isna()를 사용합니다.
empty_link_df = df[df["링크"].isna()]
print(empty_link_df)
isna()는 값이 비어 있으면 True, 값이 있으면 False를 반환합니다.
반대로 링크가 들어 있는 행만 보고 싶다면 notna()를 사용할 수 있습니다.
valid_link_df = df[df["링크"].notna()]
print(valid_link_df)
파일이 만들어졌다는 사실과 데이터가 제대로 들어왔다는 것은 다른 문제였습니다.
자동으로 쌓이는 파일일수록 빈칸을 확인하는 코드가 필요하겠다고 느꼈습니다.
5. 여러 조건을 한꺼번에 적용하기
카테고리가 코딩 공부이면서 링크도 들어 있는 행만 골라봤습니다.
result_df = df[
(df["카테고리"] == "코딩 공부")
& (df["링크"].notna())
]
print(result_df[["제목", "링크", "수집일"]])
pandas에서 두 조건을 모두 만족해야 할 때는 &를 사용합니다.
조건마다 괄호를 넣어야 한다는 점도 중요했습니다. 일반 Python 조건문처럼 and를 쓰면 DataFrame에서는 오류가 날 수 있습니다.
둘 중 하나만 만족해도 되는 조건은 |를 사용합니다.
6. 실무에서는 어디에 쓸 수 있을까?
회사에서 받는 Excel 추출 파일도 같은 방식으로 확인할 수 있을 것 같습니다.
-
특정 영업 단계의 Opportunity만 찾기
-
담당자가 비어 있는 데이터 확인하기
-
금액이 입력된 건만 따로 보기
-
특정 Campaign이나 Tag가 포함된 행 찾기
-
필수 항목이 빠진 데이터를 점검하기
-
Excel 필터로도 할 수 있지만, 조건을 코드로 저장해 두면 다음 파일에도 같은 기준을 다시 적용할 수 있습니다.
7. 삽질했던 부분들
여러 조건을 연결할 때 처음에는 아래처럼 작성했습니다.
df[
df["카테고리"] == "코딩 공부"
and df["링크"].notna()
]
실행해 보니 DataFrame의 참과 거짓을 한 번에 판단할 수 없다는 오류가 나왔습니다.
pandas에서는 and 대신 &를 쓰고, 각 조건을 괄호로 감싸야 했습니다.
df[
(df["카테고리"] == "코딩 공부")
& (df["링크"].notna())
]
코드 모양은 비슷해 보였는데 작동 방식은 달랐습니다. 오류가 나면 조건식의 괄호와 연결 기호부터 확인하면 되겠습니다.
8. 아웃트로: Excel 필터를 Python 코드로 바꿔보기
오늘은 pandas로 원하는 조건의 행만 고르고, 빈칸이 있는 데이터도 확인해 봤습니다.
핵심 정리
-
df[df[“열”] == “값”]으로 같은 값 찾기
-
str.contains()로 특정 단어가 포함된 행 찾기
-
isna()로 빈칸 확인하기
-
notna()로 값이 있는 행만 고르기
-
&와 |로 여러 조건 연결하기
이제 할 수 있는 것들
-
크롤링 결과에서 원하는 글만 골라 보기
-
링크나 제목이 빠진 행 찾기
-
여러 조건을 만족하는 데이터만 따로 확인하기
-
반복하던 Excel 필터 기준을 코드로 저장하기
-
다음 포스팅에서는 이렇게 골라낸 데이터를 새로운 Excel 파일로 저장해 보려고 합니다.
필터링 결과를 별도 시트로 만들고, 원본 파일과 구분해서 관리하는 방법을 공부해 보겠습니다.