【Pandas】pandas DataFrame clip
Pandas2.2 DataFrame
Computations descriptive stats
| 方法 | 描述 | 
|---|---|
| DataFrame.abs() | 用于返回 DataFrame 中每个元素的绝对值 | 
| DataFrame.all([axis, bool_only, skipna]) | 用于判断 DataFrame 中是否所有元素在指定轴上都为 True | 
| DataFrame.clip([lower, upper, axis, inplace]) | 用于截断(限制)DataFrame 中的数值 | 
pandas.DataFrame.clip()
pandas.DataFrame.clip() 方法用于截断(限制)DataFrame 中的数值,将小于下限 lower 的值替换为 lower,大于上限 upper 的值替换为 upper。该方法常用于数据清洗、特征缩放等场景。
一、方法签名
DataFrame.clip(lower=None, upper=None, axis=None, inplace=False)
参数说明:
| 参数 | 类型 | 描述 | 
|---|---|---|
| lower | float 或 array-like, optional | 下限值。若为标量,则所有元素低于此值将被替换;若为 array-like(如 Series),则按列/行分别设置下限。 | 
| upper | float 或 array-like, optional | 上限值。用法与 lower类似。 | 
| axis | {0/‘index’, 1/‘columns’}, optional | 若 lower或upper是 Series,则指定广播方向:0表示按行广播(默认),1表示按列广播。 | 
| inplace | bool, default: False | 是否在原 DataFrame 上修改。若为 True,不返回新对象,直接修改原数据。 | 
⚠️ 注意:
lower和upper至少要提供一个。
二、返回值
- 返回一个新的 DataFrame(或原地修改),其中: - 所有小于 lower的值 →lower
- 所有大于 upper的值 →upper
 
- 所有小于 
三、使用示例及结果
示例1:基本用法(设定上下限)
import pandas as pddf = pd.DataFrame({'A': [1, 2, 3, 4, 5],'B': [-5, 0, 5, 10, 15]
})# 将数值限制在 [0, 10] 范围内
result = df.clip(lower=0, upper=10)
print(result)
输出:
   A   B
0  1   0
1  2   0
2  3   5
3  4  10
4 10  10
解释:
- 列 A 中小于 0 的值变为 0,大于 10 的值变为 10。
- 列 B 同理。
示例2:仅设置下限(lower)
result = df.clip(lower=2)
print(result)
输出:
   A   B
0  2   2
1  2   2
2  3   5
3  4  10
4  5  15
解释:
- 所有小于 2 的值都被替换为 2。
示例3:仅设置上限(upper)
result = df.clip(upper=10)
print(result)
输出:
   A   B
0  1  -5
1  2   0
2  3   5
3  4  10
4 10  10
解释:
- 所有大于 10 的值都被替换为 10。
示例4:按列设置不同的上下限(使用 Series)
lower = pd.Series({'A': 2, 'B': 0})
upper = pd.Series({'A': 4, 'B': 10})result = df.clip(axis=1, lower=lower, upper=upper)
print(result)
输出:
   A   B
0  2   0
1  2   0
2  3  5
3  4  10
4  4  10
解释:
- 每列使用不同的 lower和upper值进行裁剪。
示例5:按行设置裁剪范围(axis=1)
 
lower_row = pd.Series([1, 0, 2, 5, 10], index=df.index)# 对每一行设置不同的 lower 值,并按行广播
result = df.clip(lower=lower_row, axis=0)
print(result)
输出:
     A     B
0  1.0  1.00
1  2.0  0.00
2  3.0  2.00
3  5.0  5.00
4 10.0 10.00
解释:
- 每一行使用不同的 lower值进行裁剪,通过axis=0实现按行广播。
四、适用场景
| 场景 | 描述 | 
|---|---|
| 数据清洗 | 去除异常值,防止极端值影响模型训练或可视化。 | 
| 特征工程 | 对连续变量进行裁剪,使其更符合分布假设。 | 
| 数据标准化 | 在归一化前先对数据做裁剪,避免极大值干扰。 | 
五、注意事项
- lower和- upper可以是标量或 Series,支持灵活的逐列或逐行设置。
- 若同时传入 lower和upper,则两者都会生效。
- 使用 inplace=True会直接修改原始 DataFrame。
- 支持 NaN值,不会改变其位置。
六、总结
| 特性 | 描述 | 
|---|---|
| 功能 | 截断 DataFrame 中的数值,限制在指定范围内 | 
| 适用类型 | 数值型列(int、float) | 
| 是否修改原数据 | 默认否,可通过 inplace=True修改原数据 | 
| 灵活性 | 支持标量、Series 设置不同列/行的上下限 | 
clip() 是一个非常实用的数据预处理工具,特别适合在机器学习、数据分析中控制数值范围和去除异常值。
