最新Django3.1大神之路视频!长达77小时、17G、233节 ,全方位无死角深入源码的专注教程!包含完整的模型层、数据迁移、 类视图、异步视图、日志、认证权限和开发工具等更多文字教程未包含的内容。免费章节pan.baidu.com/s/1dqGWNwmBnLxhM7DnXiePIQ 提取码:ko4y 。查看视频介绍点我
学习交流QQ群:787071373
原始数据中,往往包含大量重复的行,需要我们删除,让数据集更健康。
In [51]: df = pd.DataFrame({'k1':['one','two']*3 + ['two'], 'k2':[1,1,2,3,3,4,4]}) In [52]: df # 最后一行是重复的 Out[52]: k1 k2 0 one 1 1 two 1 2 one 2 3 two 3 4 one 3 5 two 4 6 two 4 In [53]: df.duplicated() # Out[53]: 0 False 1 False 2 False 3 False 4 False 5 False 6 True dtype: bool In [54]: df.drop_duplicates() Out[54]: k1 k2 0 one 1 1 two 1 2 one 2 3 two 3 4 one 3 5 two 4 In [55]: df # 并没有改变原数据 Out[55]: k1 k2 0 one 1 1 two 1 2 one 2 3 two 3 4 one 3 5 two 4 6 two 4
上面,使用duplicated方法判断各行是否有重复,并返回一个布尔值Series。然后使用drop_duplicates方法将重复行删除,留下那些不重复的。
如果想指定根据某列的数据进行去重判断和操作,可以指定列名:
In [56]: df['v1'] = range(7) In [57]: df Out[57]: 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 In [58]: df.drop_duplicates(['k1']) Out[58]: k1 k2 v1 0 one 1 0 1 two 1 1
默认情况下都是保留第一个观察到的值,如果想保留最后一个,可以使用参数keep='last':
In [59]: df.drop_duplicates(['k1','k2'], keep='last') Out[59]: k1 k2 v1 0 one 1 0 1 two 1 1 2 one 2 2 3 two 3 3 4 one 3 4 6 two 4 6