如何在Pandas中删除重复的内容

416 阅读2分钟

"重复数据 "的字面意思是去除重复的数据。在一个数据集中,重复数据的整个过程就是寻找和删除重复的数据,最后只保存一个现有的数据项。

1.为什么我们在数据分析中需要重复数据删除

  1. 删除重复的数据是数据分析中常见的问题。
  2. 重复数据删除不仅可以节省内存空间,提高写入性能,还可以提高数据集的准确性,防止数据集受到重复数据的影响。

2.Pandas drop_duplicates()函数

  1. Pandas DataFrame对象提供了**drop_duplicates()**函数,用于删除重复的数据。

  2. 下面是**drop_duplicates()**函数的语法:

    df.drop_duplicates(subset=['Python','Java','Javascript'],keep='first',inplace=True)
    
  3. subset:表示要被删除的列名。默认值为无。

  4. keep:有三个可选参数:第一最后False。默认值是first,表示只保留第一个重复的内容,其他重复的内容被删除,last表示只保留最后一个重复的内容。False意味着所有的重复都被删除。

  5. inplace: 布尔型参数。默认值是False,这意味着删除重复的内容后会返回一个副本。如果它是True,意味着直接在原始数据上删除重复的内容。

  6. 下面是这个例子,你可以看到注释中的详细解释。

    def drop_duplicates_example():
        
        # creat the original data source.
        source_data = {
           
           'OS':['Windows', 'Linux', 'MacOS', 'Linux', 'Windows', 'Windows'],
           
           'Coding Language':['Python', 'Java', 'Python', 'Java', 'Python', 'C++'],
           
           'Database':['MySQL', 'MongoDB', 'Oracle', 'MySQL', 'MySQL', 'SQLite']
        }
        
        df = pd.DataFrame(data = source_data)
    
        print('*************** original dataframe object ******************\r')
        print(df)   
        
        
        print('\n *************** The first occurrence of duplicates is retained by default ******************\r')
        df1 = df.drop_duplicates()
        print('df.drop_duplicates()\r', df1)
        
        
        print('\n *************** reset dataframe object index ******************\r')
        print('df1.reset_index(drop=True)\r', df1.reset_index(drop=True))
        
        
        print('\n *************** set keep=False to remove all duplicate data ******************\r')
        df2 = df.drop_duplicates(keep=False)
        print('df.drop_duplicates(keep=False)\r', df2)
        
        
        print('\n *************** drop duplicates according to the specified column label, drop all the duplicate data in OS column ******************\r')
        df3 = df.drop_duplicates(subset=['OS'],keep='first')
        print('df.drop_duplicates(subset=[\'OS\'],keep=\'first\')\r', df3)
        
        
        print('\n *************** drop duplicates according to the multiple specified column labels, drop all the duplicate data in OS & Database column ******************\r')
        df4 = df.drop_duplicates(subset=['OS', 'Database'], keep=False)
        print('df.drop_duplicates(subset=[\'OS\', \'Database\'],keep=\'last\')\r', df4)
    
    if __name__ == '__main__':
        
        drop_duplicates_example()
    
  7. 下面是上述例子的源代码执行结果

    *************** original dataframe object ******************
    
            OS Coding Language Database
    0  Windows          Python    MySQL
    1    Linux            Java  MongoDB
    2    MacOS          Python   Oracle
    3    Linux            Java    MySQL
    4  Windows          Python    MySQL
    5  Windows             C++   SQLite
    
     *************** The first occurrence of duplicates is retained by default ******************
    
    df.drop_duplicates()
             OS Coding Language Database
    0  Windows          Python    MySQL
    1    Linux            Java  MongoDB
    2    MacOS          Python   Oracle
    3    Linux            Java    MySQL
    5  Windows             C++   SQLite
    
     *************** reset dataframe object index ******************
    
    df1.reset_index(drop=True)
             OS Coding Language Database
    0  Windows          Python    MySQL
    1    Linux            Java  MongoDB
    2    MacOS          Python   Oracle
    3    Linux            Java    MySQL
    4  Windows             C++   SQLite
    
     *************** set keep=False to remove all duplicate data ******************
    
    df.drop_duplicates(keep=False)
             OS Coding Language Database
    1    Linux            Java  MongoDB
    2    MacOS          Python   Oracle
    3    Linux            Java    MySQL
    5  Windows             C++   SQLite
    
     *************** drop duplicate according to the specified column label, drop all the duplicate data in OS column ******************
    
    df.drop_duplicates(subset=['OS'],keep='first')
             OS Coding Language Database
    0  Windows          Python    MySQL
    1    Linux            Java  MongoDB
    2    MacOS          Python   Oracle
    
     *************** drop duplicate according to the multiple specified column labels, drop all the duplicate data in OS and Database column ******************
    
    df.drop_duplicates(subset=['OS', 'Database'],keep='last')
             OS Coding Language Database
    1    Linux            Java  MongoDB
    2    MacOS          Python   Oracle
    3    Linux            Java    MySQL
    5  Windows             C++   SQLite