pandas去除DataFrame重复项

DataFrame中存在重复的行或者几行中某几列的值重复,这时候需要去掉重复行,示例如下:

def set_data(data, namelist, mode='all'):
    '''
    各种去重操作
    :param data:待处理数据dataframe
    :param mode:去重模式 all,select,drop,specially
    :param namelist:可选的字段/要删除的数据,list
    :return: 去重后的数据dataframe
    '''
    #1、完全去重mode='all'
    if mode == 'all':
       setdata = data.drop_duplicates(subset=None, keep='first', inplace=False)
       print('重复数据{}条,剩余{}条'.format(len(data)-len(setdata), len(setdata)))
    #2、选字段去重mode='select'
    if mode == 'select':
        setdata = data.drop_duplicates(subset=namelist, keep='first', inplace=False)
        print('重复数据{}条,剩余{}条'.format(len(data) - len(setdata), len(setdata)))
    #3、删除字段去重mode='drop'
    if mode == 'drop':
        setdata = data.drop(namelist, axis=1)
        setdata = setdata.drop_duplicates(subset=None, keep='first', inplace=False)
        print('重复数据{}条,剩余{}条'.format(len(data) - len(setdata), len(setdata)))
    #4、特定数据去重mode='specially'
    if mode == 'specially':
        droplist = []
        for i in range(len(data)):
            for j in range(len(namelist)):
                if data['A'][i] == namelist[j][0] and data['B'][i] == namelist[j][1]:
                    droplist.append(i)
                    break
        setdata = data.drop(droplist, axis=0)
        print('重复数据{}条,剩余{}条'.format(len(data) - len(setdata), len(setdata)))
    setdata = setdata.reset_index(drop=True)
    return setdata
data=data.drop_duplicates(subset=['A', 'B'],keep='first',inplace=False)

1、代码中subset对应的值是列名,表示只考虑这几列,将这几列对应值相同的行进行去重。默认值为subset=None表示考虑所有列。
2、keep='first’表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,分别表示保留最后一次出现的重复行和去除所有重复行。
3、inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本,将副本赋值dataframe。

setdata = data.drop(['A', 'B'], axis=1)
setdata = data.drop([1, 5], axis=0)

1、DataFrame上删除某行/某列,axis=1为删除某列,对应的为列名;axis=0为删除某行,对应的index值。

注意事项

setdata = setdata.reset_index(drop=True)

对去重后的数据要重建索引,否则后续操作可能报
"in pandas._libs.hashtable.Int64HashTable.get_item"这个错误。

你可能感兴趣的:(pandas,python)