赞
踩
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
和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
由上面的例子可以看出,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
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
例如,上面的例子是在一个序列上,得到一个窗口大小为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
扩张窗口是一个动态的窗口又称累计窗口,可以理解为一个动态长度的窗口,其窗口的大小就是从序列开始处到具体操作的对应位置,其使用的聚合函数会作用于这些逐步扩张的窗口上。具体地说,设序列为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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。