Python处理异常值的核心方法包括统计检测(Z-score/IQR)、可视化识别(箱线图/散点图)和机器学习算法(孤立森林/聚类),通过try-except
代码块可优雅捕获运行时错误,而自定义异常类能精准处理业务逻辑问题。以下是具体实现方案:
-
基础异常捕获
使用try-except
处理常见异常如除零错误或文件操作:python复制
try: result = 10 / 0 except ZeroDivisionError: print("除数不能为零")
文件读取时捕获
FileNotFoundError
:python复制
try: with open("data.txt") as f: content = f.read() except FileNotFoundError: print("文件不存在")
-
统计方法检测数值异常
Z-score法(适用于正态分布数据):python复制
import numpy as np data = np.array([10, 12, 12, 13, 100]) z_scores = (data - np.mean(data)) / np.std(data) outliers = data[np.abs(z_scores) > 3] # 阈值设为3
IQR四分位距法(通用性强):
python复制
Q1, Q3 = np.percentile(data, [25, 75]) IQR = Q3 - Q1 outliers = data[(data < Q1-1.5*IQR) | (data > Q3+1.5*IQR)]
-
机器学习算法处理复杂异常
孤立森林(适合高维数据):python复制
from sklearn.ensemble import IsolationForest model = IsolationForest(contamination=0.1) outliers = model.fit_predict(data.reshape(-1, 1))
K-means聚类:
python复制
from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=2).fit(data.reshape(-1, 1)) outliers = data[kmeans.labels_ == 1] # 假设异常属于次要簇
-
自定义异常与资源清理
定义业务异常类并确保资源释放:python复制
class InvalidPriceError(Exception): pass try: if price < 0: raise InvalidPriceError("价格不能为负") except InvalidPriceError as e: print(e) finally: print("执行完毕") # 必执行代码块
总结:结合场景选择合适方法——简单异常用try-except
,数值异常用统计检测,复杂模式依赖机器学习。始终通过finally
确保资源释放,自定义异常提升代码可读性。