Python/NumPy | Pandas

[Pandas] 데이터형이 리스트인 컬럼 empty 여부 확인

비번변경 2024. 2. 15. 17:23

개요

데이터형이 리스트인 컬럼을 데이터프레임이 있다고 하자. 컬럼의 리스트가 비어있지 않은 행만 필터링하고 싶다.

방법을 적어둔다.

 

 

예시 데이터프레임

import pandas as pd

df = pd.DataFrame({"col": [[1], [2, 3], [], [4, 5, 6], []]})

이 데이터프레임을 필터링하여 인덱스가 0, 1, 3인 행만 남기려고 한다.

 

방법

1. str.len으로 리스트 길이 확인

str.len을 활용하면 리스트의 길이를 확인할 수 있다.

print(df['col'].str.len())

이를 이용하여 리스트의 길이가 0이 아닌 행만 필터링한다.

df[df['col'].str.len() != 0]

다만 벡터화 연산을 사용한 것이 아니기 때문에 데이터프레임의 크기가 크다면 실행 시간이 길 수 있다.

 

 

2. bool 데이터형으로 변환

Python에서 리스트가 비어있는지 확인하는 가장 효율적인 방법은 리스트를 bool형으로 형 병환하는 것이다. 보통 조건문 if로 많이 사용한다. 즉, astype 함수를 이용해 컬럼의 데이터 타입을 bool형으로 변환하는 방법을 사용할 수 있다.

df["col"].astype(bool)

df[df['col'].astype(bool)]

 

 

3. len 함수 apply

DataFrame에서 데이터형이 리스트인 컬럼의 길이를 확인할 때 str.len을 사용할 필요 없이 apply 함수를 사용할 수도 있다. 

df['col'].apply(len)

len 함수를 apply한 결과에서 값이 0보다 큰 행만 필터링한다.

df[df['col'].apply(len).gt(0)]

 

참고 문서

https://stackoverflow.com/questions/56903912/how-to-check-if-an-element-is-an-empty-list-in-pandas