DataFrame.clip(lower=None, upper=None, axis=None, inplace=False, *args, **kwargs)
在输入阈值处修剪值。
将边界外的值指定给边界值。阈值可以是奇异值或数组,并且在后一种情况下,剪切在指定轴中以元素方式执行。
参数: | lower : 最小阈值。低于此阈值的所有值都将设置为它。 upper : 最大阈值。高于此阈值的所有值都将设置为它。 axis : 沿给定轴将对象与下部和上部对齐。 inplace : 布尔值,默认为 是否对数据执行操作。 版本0.21.0中的新功能。 *args,** kwargs 其他关键字没有效果,但可以接受与numpy的兼容性。 |
返回: | Series或DataFrame 与调用对象相同的类型,替换了剪辑边界之外的值 |
例子
1)基本用法
有一个DataFrame,包含一些随机数值。我们希望将所有数值限制在一个指定的范围内。
import pandas as pd
import numpy as np
# 创建一个示例DataFrame
data = {
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [-5, 0, 5, 10, 15]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)
# 使用clip方法,将数值限制在2到10之间
clipped_df = df.clip(lower=2, upper=10)
print("\n裁剪后的DataFrame (范围 2 到 10):")
print(clipped_df)
2)单独指定最小值或最大值
可以只指定最小值或最大值。
import pandas as pd
import numpy as np
# 创建一个示例DataFrame
data = {
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [-5, 0, 5, 10, 15]
}
df = pd.DataFrame(data)
# 只限制最小值
clipped_df_min = df.clip(lower=0)
print("\n裁剪后的DataFrame (最小值为 0):")
print(clipped_df_min)
# 只限制最大值
clipped_df_max = df.clip(upper=10)
print("\n裁剪后的DataFrame (最大值为 10):")
print(clipped_df_max)
3)使用DataFrame作为边界
也可以使用另一个DataFrame来作为上下限的边界。
import pandas as pd
import numpy as np
# 创建一个示例DataFrame
data = {
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50],
'C': [-5, 0, 5, 10, 15]
}
df = pd.DataFrame(data)
# 创建上下限DataFrame
lower_bounds = pd.DataFrame({
'A': [0, 1, 2, 3, 4],
'B': [5, 10, 15, 20, 25],
'C': [0, 0, 0, 0, 0]
})
upper_bounds = pd.DataFrame({
'A': [2, 3, 4, 5, 6],
'B': [15, 25, 35, 45, 55],
'C': [5, 10, 15, 20, 25]
})
clipped_df_bounds = df.clip(lower=lower_bounds, upper=upper_bounds)
print("\n裁剪后的DataFrame (使用DataFrame作为边界):")
print(clipped_df_bounds)
4)使用示例
import pandas as pd
# 创建一个包含示例数据的DataFrame
data = {'col_0': [9, -3, 0, -1, 5], 'col_1': [-2, -7, 6, 8, -5]}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)
# 使用下限阈值和上限阈值的每列剪辑
df_clipped = df.clip(-4, 6)
print("\n使用全局下限阈值 -4 和上限阈值 6 的裁剪后的DataFrame:")
print(df_clipped)
# 使用每个列元素的特定下限和上限阈值的剪辑
t = pd.Series([2, -4, -1, 6, 3])
df_clipped_specific = df.clip(t, t + 4, axis=0)
print("\n使用每个列元素的特定下限和上限阈值的裁剪后的DataFrame:")
print(df_clipped_specific)