Bootstrap

pandas数据变换(一)

1.删除重复值

import numpy as np
import pandas as pd

data=pd.DataFrame({'k1':['one','two']*3+['two'],'k2':[1,1,2,3,3,4,4]})
print(data)

#输出:
 k1  k2
0  one   1
1  two   1
2  one   2
3  two   3
4  one   3
5  two   4
6  two   4

DataFrame的duplicated()方法会返回一个布尔类型的Series,默认判断每行是否重复,根据的是前一行来判断是否重复

print(data.duplicated())

#输出:
0    False
1    False
2    False
3    False
4    False
5    False
6     True
dtype: bool

#DataFrame的drop_duplicates()会删除重复的部分,返回一个新的DataFrame,这里重复的部分表明是row index 为6的行
#记住这里其实不是上面那个duplicated,它是将duplicated中的d 改为了s
print(data.drop_duplicates())

#输出:
 k1  k2
0  one   1
1  two   1
2  one   2
3  two   3
4  one   3
5  two   4

上面的方法都有一个弊端就是考虑到了所有的列,可以指定一部分的数据来检测重复值.

data['v1']=range(7) #range()为python自带的生成数字的函数
print(data)
print(data.drop_duplicates(['k1'])) #这里指定删除‘k1’列中的所有重复值,因为默认删除的是行,所以保留的是k1中没有重复值的行

#输出:
   k1  k2  v1
0  one   1   0
1  two   1   1
2  one   2   2
3  two   3   3
4  one   3   4
5  two   4   5
6  two   4   6
    k1  k2  v1
0  one   1   0
1  two   1   1

duplicated()和drop_duplicates()默认是保留第一次观测到的数据的组合,意思就是如果下一行是重复的和第一次观测到的重复的。那么就去掉下一行的数据,而duplicated()就会在下一行观测到的重复数据标记为True。而传入参数keep=‘last’就会保留最后一行。

print(data.duplicated(['k1','k2'],keep='last'))
print(data.drop_duplicates(['k1','k2'],keep='last'))

#输出:
0    False
1    Fals
;