一、删除重复值
对于下面的dataframe,有重复的行:
df = pd.DataFrame()
df['a'] = [1, 2, 2, 3]
df['b'] = [2, 3, 3, 4]
df
输出结果:
a b
0 1 2
1 2 3
2 2 3
3 3 4
DataFrame的duplicated
方法返回的是一个布尔值Series,这个Series反映的是每一行是否存在重复(与之前出现过的行相同)情况:
df.duplicated()
输出结果:
0 False
1 False
2 True
3 False
dtype: bool
drop_duplicates
返回的则是DataFrame,内容是duplicated返回数组中为False的部分:
df.drop_duplicates()
输出结果:
a b
0 1 2
1 2 3
3 3 4
注意到,此时的索引未改变,而且保留第一个观测到的值,而传入参数keep='last’
将会返回最后一个:
df.drop_duplicates(keep='last')
输出结果:
a b
0 1 2
2 2 3
3 3 4
也可以指定数据的任何子集来检测是否有重复:
df.drop_duplicates(['a'], keep='last') # 指定a列是否有重复值
输出结果:
a b
0 1 2
2 2 3
3 3 4
二、替换
pandas库中的replace
提供了简单灵活的替换方法:
a = pd.Series([0, 1, -999, 10, -1000])
a
输出结果:
0 0
1 1
2 -999
3 10
4 -1000
dtype: int64
对于a,其中的-999为缺失值,所以可替换为NA:
a.replace(-999, np.nan) # 将-999替换为NA
输出结果:
0 0.0
1 1.0
2 NaN
3 10.0
4 -1000.0
dtype: float64
也可以替换多个值,也可以将多个值替换为不同的值:
a.replace([-999, -1000], np.nan) # 将-999和-1000都替换为空值
输出结果:
0 0.0
1 1.0
2 NaN
3 10.0
4 NaN
dtype: float64
a.replace([-999, -1000], [0, 1]) # 将-999替换为0,将-1000替换为1
输出结果:
0 0
1 1
2 0
3 10
4 1
dtype: int64