当前位置:   article > 正文

2020-12-18_在 clip 中,超过边界的只能截断为边界值,如果要把超出边界的替换为自定义的值,应

在 clip 中,超过边界的只能截断为边界值,如果要把超出边界的替换为自定义的值,应

pandas基础

1.drop_duplicates方法
drop_duplicates方法是对DataFrame格式的数据,去除特定列下面的重复行,这个函数中比较关键的参数是keep,有三种取值【first,last,False】默认值 first 表示每个组合保留第一次出现的所在行, last 表示保留最后一次出现的所在行, False 表示把所有重复组合所在的行剔除。

data = pd.DataFrame({'A':[1,1,2,2],'B':['a','b','a','b']})
data
    A	B
0	1	a
1	1	b
2	2	a
3	2	b

data.drop_duplicates('B',keep='last')
    A	B
2	2	a
3	2	b

data.drop_duplicates('B',keep=False)
A	B
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

和drop_duplicates方法功能相似的是duplicated,两者的不同之处在于,后者返回的是布尔列表,其返回的序列,把重复元素设为 True ,否则为 False 。 drop_duplicates 等价于把 duplicated 为 True 的对应行剔除。
2.替换函数
替换函数可以分为三大类别:映射替换、逻辑替换、数值替换
映射替换:主要使用str.replace方法,replace方法中值得一提参数是methond,包含【‘ffill’,‘bfill’】,ffill表示用前面一个最近的未被替代的值进行替换,bfill则相反。
逻辑替换:逻辑替换主要包括s.where和s.mask,这两个函数是完全对称的: where 函数在传入条件为 False 的对应行进行替换,而 mask 在传入条件为 True 的对应行进行替换,当不指定替换值时,替换为缺失值。
数值替换
数值替换包含了 round, abs, clip 方法,它们分别表示取整、取绝对值和截断

data = {'col_0': [9, -3, 0, -1, 5], 'col_1': [-2, -7, 6, 8, -5]}
df = pd.DataFrame(data)
df
   col_0col_1
0	9	-2
1	-3	-7
2	0	6
3	-1	8
4	5	-5

df.clip(-4,6)
col_0	col_1
0	6	-2
1	-3	-4
2	0	6
3	-1	6
4	5	-4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

由上面的例子可以看出,clip函数对超过或者低于指定阈值的数据将替换为指定阈值,小于-4的都替换成-4,大于6的替换成6

在 clip 中,超过边界的只能截断为边界值,如果要把超出边界的替换为自定义的值,应当如何做?例如:上述例子中>=0的都替换为空值

a = df.clip(-4,6)
a.where(a<0)

   col_0	col_1
0	NaN	    -2.0
1	-3.0	-4.0
2	NaN	     NaN
3	-1.0	 NaN
4	NaN	    -4.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.排序函数
排序共有两种方式,其一为值排序,其二为索引排序,对应的函数是 sort_values 和 sort_index 。

4.窗口函数
窗口函数主要分为三大类别:滑动窗口、扩张窗口、指数加权窗口
滑动窗口可以看成是一个固定长度的窗口,用.rolling函数来得到滑窗对象

s = pd.Series([1,2,3,4,5])
roller = s.rolling(window = 2)

roller.mean()
0    NaN
1    1.5
2    2.5
3    3.5
4    4.5
dtype: float64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

例如,上面的例子是在一个序列上,得到一个窗口大小为2的滑窗对象,.mean()是对滑窗里的值取均值(默认取当前值前面的部分),窗口走到1的时候前面没值,走到2的时候(1,2)属于滑窗里的值,取均值为1.5,走到3的时候(2,3)取均值2.5,依次往后类推。
shift, diff, pct_change 是一组类滑窗函数,它们的公共参数为 periods=n ,默认为1,分别表示取向前第 n 个元素的值、与向前第 n 个元素做差(与 Numpy 中不同,后者表示 n 阶差分)、与向前第 n 个元素相比计算增长率。这里的 n 可以为负,表示反方向的类似操作

例子:rolling 对象的默认窗口方向都是向前的,某些情况下用户需要向后的窗口,例如对1,2,3设定向后窗口为2的 sum 操作,结果为3,5,NaN,此时应该如何实现向后的滑窗操作?

s = pd.Series([1,2,3])
roller = s.rolling(window = 2)
roller.sum()
0    NaN
1    3.0
2    5.0
dtype: float64

roller.sum().shift(-1)
0    3.0
1    5.0
2    NaN
dtype: float64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

扩张窗口是一个动态的窗口又称累计窗口,可以理解为一个动态长度的窗口,其窗口的大小就是从序列开始处到具体操作的对应位置,其使用的聚合函数会作用于这些逐步扩张的窗口上。具体地说,设序列为a1, a2, a3, a4,则其每个位置对应的窗口即[a1]、[a1, a2]、[a1, a2, a3]、[a1, a2, a3, a4]。

例子:cummax, cumsum是典型的类扩张窗口函数,请使用 expanding 对象依次实现它们。

s = pd.Series([1, 3, 6, 10])
#cummax
s.expanding().max()
0     1.0
1     3.0
2     6.0
3    10.0
dtype: float64

#cumsum
s.expanding().sum()
0     1.0
1     4.0
2    10.0
3    20.0
dtype: float64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号