Python Pandas에서 str.contains 사용 시 NaN 무시하는 방법
fillna 메서드 사용
fillna
메서드를 사용하여 NaN 값을 빈 문자열("")로 바꿔줍니다. 다음 코드는 str.contains
메서드를 사용하여 "python" 문자열을 포함하는 행을 선택하고, NaN 값은 무시하는 예시입니다.
import pandas as pd
df = pd.DataFrame({"data": ["python", "pandas", np.nan, "R"]})
# NaN 값을 빈 문자열("")로 바꾸기
df = df.fillna("")
# "python" 문자열을 포함하는 행 선택
result = df[df["data"].str.contains("python")]
print(result)
# 출력
# data
# 0 python
na=False 옵션 사용
str.contains
메서드의 na=False
옵션을 사용하면 NaN 값을 False로 간주하여 에러 없이 결과를 얻을 수 있습니다. 다음 코드는 na=False
옵션을 사용하여 "python" 문자열을 포함하는 행을 선택하는 예시입니다.
import pandas as pd
df = pd.DataFrame({"data": ["python", "pandas", np.nan, "R"]})
# "python" 문자열을 포함하는 행 선택
result = df[df["data"].str.contains("python", na=False)]
print(result)
# 출력
# data
# 0 python
두 방법 모두 NaN 값을 무시하고 str.contains
메서드를 사용하여 원하는 결과를 얻을 수 있습니다. 상황에 맞는 방법을 선택하여 사용하세요.
참고:
fillna
메서드는 NaN 값을 다른 값으로 바꾸는 데 유용합니다.na=False
옵션은 NaN 값을 False로 간주하여 결과에 영향을 미치지 않습니다.
예제 코드
import pandas as pd
# 데이터 생성
df = pd.DataFrame({
"data": ["python", "pandas", np.nan, "R", np.nan, "python"],
"value": [10, 20, 30, 40, 50, 60]
})
# 방법 1: fillna 메서드 사용
# NaN 값을 빈 문자열("")로 바꾸기
df = df.fillna("")
# "python" 문자열을 포함하는 행 선택
result1 = df[df["data"].str.contains("python")]
# 결과 출력
print("방법 1: fillna 메서드 사용")
print(result1)
# 방법 2: na=False 옵션 사용
# "python" 문자열을 포함하는 행 선택
result2 = df[df["data"].str.contains("python", na=False)]
# 결과 출력
print("방법 2: na=False 옵션 사용")
print(result2)
결과:
방법 1: fillna 메서드 사용
data value
0 python 10
5 python 60
방법 2: na=False 옵션 사용
data value
0 python 10
5 python 60
str.contains
사용 외에 NaN 값을 무시하는 대체 방법
str.replace와 str.len 메서드 사용
str.replace
메서드를 사용하여 NaN 값을 빈 문자열("")로 바꾼 후, str.len
메서드를 사용하여 문자열 길이를 비교하여 원하는 결과를 얻을 수 있습니다. 다음 코드는 str.replace
와 str.len
메서드를 사용하여 "python" 문자열을 포함하는 행을 선택하는 예시입니다.
# NaN 값을 빈 문자열("")로 바꾸기
df["data"] = df["data"].replace(np.nan, "")
# "python" 문자열 길이가 0보다 큰 행 선택
result = df[df["data"].str.len() > 0]
# 결과 출력
print(result)
# 출력
# data value
# 0 python 10
# 1 pandas 20
# 4 R 40
# 5 python 60
np.where 함수 사용
# NaN 값을 빈 문자열("")로 바꾸기
df["data"] = np.where(df["data"].isnull(), "", df["data"])
# "python" 문자열을 포함하는 행 선택
result = df[df["data"].str.contains("python")]
# 결과 출력
print(result)
# 출력
# data value
# 0 python 10
# 5 python 60
str.findall 메서드 사용
str.findall
메서드를 사용하여 문자열 내에서 특정 문자열을 찾는 횟수를 계산하고, 결과를 사용하여 원하는 결과를 얻을 수 있습니다. 다음 코드는 str.findall
메서드를 사용하여 "python" 문자열을 포함하는 행을 선택하는 예시입니다.
# "python" 문자열을 찾는 횟수 계산
df["count"] = df["data"].str.findall("python").str.len()
# "python" 문자열을 포함하는 행 선택
result = df[df["count"] > 0]
# 결과 출력
print(result)
# 출력
# data value count
# 0 python 10 1
# 5 python 60 1
주의 사항:
- 위의 대체 방법들은
str.contains
메서드보다 느릴 수 있습니다. str.replace
메서드를 사용하면 원본 데이터가 변경됩니다. 주의해서 사용하세요.
python pandas