[Python] Pandas DataFrame에서 조건에 따라 행 삭제 및 특정 데이터 추출하는 방법 정리

2025. 7. 20. 22:12·개발 (Development)/Python

Pandas를 활용해 데이터를 전처리하다 보면, 특정 조건에 따라 행을 삭제하거나 인덱스와 컬럼명을 기준으로 값을 가져오는 일이 자주 발생합니다. 이번 글에서는 DataFrame에서 조건에 맞는 행을 안전하게 삭제하는 방법과 특정 셀의 값을 가져오는 여러 가지 방식을 함께 정리해보겠습니다.

DataFrame에서 조건에 맞는 행 삭제하기

1. 반복문 없이 조건 필터링으로 삭제 (추천)

Pandas에서는 반복문보다 조건 필터링을 사용하는 것이 훨씬 효율적이고 안전합니다.

# 예: 'boundary' 컬럼이 빈 문자열("")인 행 제거
df = df[df['boundary'] != '']

혹은 drop() 메서드를 사용하는 방식도 가능합니다.

df.drop(df[df['boundary'] == ''].index, inplace=True)

2. 반복문 안에서 삭제하려면? → 인덱스만 모아 일괄 삭제

반복문 안에서 바로 df.drop()을 사용하는 것은 인덱스 변화로 인해 오류가 생길 수 있습니다. 대신 삭제할 인덱스를 따로 모아서 한 번에 삭제해야 합니다.

drop_indices = []

for idx, row in df.iterrows():
    if row['boundary'] == '':
        drop_indices.append(idx)

df.drop(index=drop_indices, inplace=True)

3. NaN 또는 빈 문자열 모두 제거하기

엑셀 데이터를 불러왔을 때는 빈 셀은 NaN, 빈 문자열은 ""으로 들어오는 경우가 있습니다. 아래와 같이 두 조건을 모두 고려해 필터링할 수 있습니다.

df = df[df['컬럼명'].notna() & (df['컬럼명'] != '')]

여러 컬럼 기준으로도 다음과 같이 처리할 수 있습니다.

cols = ['col1', 'col2']
df = df[~df[cols].apply(lambda x: (x == '') | (x.isna())).any(axis=1)]

반복문 안에서 notna() 사용하기

notna()는 반복문 안에서도 유용하게 사용할 수 있습니다.

for idx, row in df.iterrows():
    if pd.notna(row['name']):
        print(f"{row['name']}은 유효한 값입니다.")

pd.isna()도 반대로 사용할 수 있으며, NaN 여부를 조건문에서 깔끔하게 처리할 수 있습니다.

인덱스와 컬럼명으로 특정 셀 값 가져오기

1. .loc[] : 라벨 기반 접근

value = df.loc['a', 'age']

2. .at[] : 단일 값 빠르게 접근

value = df.at['a', 'age']

속도는 .loc[]보다 빠르며, 단일 값에만 사용 가능합니다.

3. .iloc[] : 정수 인덱스 기반 접근

value = df.iloc[0, 1]  # 0번째 행, 1번째 열

4. 조건 필터링 후 값 가져오기

value = df[df['name'] == 'Bob']['age'].values[0]

조건이 하나만 해당될 때는 values[0]을 통해 직접 값을 추출할 수 있습니다.

마무리

Pandas에서는 반복문보다 조건 필터링을 통한 데이터 전처리가 더욱 권장됩니다. 불필요한 반복문을 줄이고, notna(), drop(), loc[], at[] 등의 함수들을 적절히 활용하면 보다 안정적이고 효율적인 데이터 처리 작업이 가능합니다.

반응형

'개발 (Development) > Python' 카테고리의 다른 글

[Python] 문자열 2줄 이상인지 확인하는 방법  (0) 2025.07.28
[Python] 딕셔너리에서 정규표현식으로 특정 형식의 키 추출하기  (4) 2025.07.28
[Python] pandas로 DataFrame 비교하여 특정 값 제거하는 방법  (0) 2025.07.20
[Python] JSON 파일을 CSV로 변환  (1) 2025.06.01
[Python] 배열을 1000개 단위로 나누어 처리하는 방법  (0) 2025.05.18
'개발 (Development)/Python' 카테고리의 다른 글
  • [Python] 문자열 2줄 이상인지 확인하는 방법
  • [Python] 딕셔너리에서 정규표현식으로 특정 형식의 키 추출하기
  • [Python] pandas로 DataFrame 비교하여 특정 값 제거하는 방법
  • [Python] JSON 파일을 CSV로 변환
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    python
    pandas
    DevOps
    JPA
    Vue.js
    자바
    백준자바
    리눅스 마스터 2급
    JSON
    오답노트
    java
    timescaledb
    javascript
    Linux master
    Kafka
    PostgreSQL
    docker
    AWS
    deepseek
    ADsP
    springboot
    백준
    Linux
    백준알고리즘
    리눅스 마스터 2급 2차
    데이터분석
    백준온라인저지
    MyBatis
    Spring boot
    Kubernetes
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Python] Pandas DataFrame에서 조건에 따라 행 삭제 및 특정 데이터 추출하는 방법 정리
상단으로

티스토리툴바