Before modeling, it's worth checking how "unusual" a variable's extreme values really are. A simple and robust method (it doesn't assume normality) is the interquartile range.
The method
With and as the first and third quartiles, the interquartile range is:
A value is considered an outlier if it falls outside:
Implementation
python
def find_outliers_iqr(series):
q1, q3 = series.quantile(0.25), series.quantile(0.75)
iqr = q3 - q1
lower, upper = q1 - 1.5 * iqr, q3 + 1.5 * iqr
return series[(series < lower) | (series > upper)]
When not to use it
The 1.5 is a convention, not a law of physics. With highly skewed distributions (income, waiting times) it's better to check visually with a boxplot before discarding data automatically — a genuine outlier may be the most important finding of the analysis.