【Pandas】pandas DataFrame clip

发布于:2025-05-10 ⋅ 阅读:(15) ⋅ 点赞:(0)

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 lowerupper 是 Series,则指定广播方向:0 表示按行广播(默认),1 表示按列广播。
inplace bool, default: False 是否在原 DataFrame 上修改。若为 True,不返回新对象,直接修改原数据。

⚠️ 注意:lowerupper 至少要提供一个。


二、返回值
  • 返回一个新的 DataFrame(或原地修改),其中:
    • 所有小于 lower 的值 → lower
    • 所有大于 upper 的值 → upper

三、使用示例及结果
示例1:基本用法(设定上下限)
import pandas as pd

df = 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

解释:

  • 每列使用不同的 lowerupper 值进行裁剪。

示例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 实现按行广播。

四、适用场景
场景 描述
数据清洗 去除异常值,防止极端值影响模型训练或可视化。
特征工程 对连续变量进行裁剪,使其更符合分布假设。
数据标准化 在归一化前先对数据做裁剪,避免极大值干扰。

五、注意事项
  • lowerupper 可以是标量或 Series,支持灵活的逐列或逐行设置。
  • 若同时传入 lowerupper,则两者都会生效。
  • 使用 inplace=True 会直接修改原始 DataFrame。
  • 支持 NaN 值,不会改变其位置。

六、总结
特性 描述
功能 截断 DataFrame 中的数值,限制在指定范围内
适用类型 数值型列(int、float)
是否修改原数据 默认否,可通过 inplace=True 修改原数据
灵活性 支持标量、Series 设置不同列/行的上下限

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


网站公告

今日签到

点亮在社区的每一天
去签到