【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()
是一个非常实用的数据预处理工具,特别适合在机器学习、数据分析中控制数值范围和去除异常值。