Python 去重csv文件中相同的重復行


讀取CSV

  • 讀取CSV文件由兩種方式:

  1. 第一種

import csvwith open('data.csv','r',encoding = 'utf8') as fp: reader = csv.reader(fp) for row in reader: print(row)
  1. 第二種

import pandas as pd #需要導入pandas庫df = pd.read_csv('data.csv')print(df)
 
 

用pandas庫的.drop_duplicates函數

1 import shutil 2 import pandas as pd 3 4 5 frame=pd.read_csv('E:/bdbk.csv',engine='python') 6 data = frame.drop_duplicates(subset=['名稱'], keep='first', inplace=False) 7 data.to_csv('E:/baike.csv', encoding='utf8')

通常會分為兩種情況,一種是去除完全重復的行數據,另一種是去除某幾列重復的行數據,就這兩種情況可用下面的代碼進行處理。

1. 去除完全重復的行數據

  • data.drop_duplicates(inplace=True)

2. 去除某幾列重復的行數據

  • data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)

subset: 列名,可選,默認為None

keep: {‘first’, ‘last’, False}, 默認值 ‘first’

  • first: 保留第一次出現的重復行,刪除后面的重復行。
  • last: 刪除重復項,除了最后一次出現。
  • False: 刪除所有重復項。

inplace:布爾值,默認為False,是否直接在原數據上刪除重復項或刪除重復項后返回副本。

( inplace=True表示直接在原來的DataFrame上刪除重復項,而默認值False表示生成一個副本。)

 

DataFrame.drop_duplicates(subset = None, keep = 'first')

DataFrame.drop_duplicates()中的參數完全實現。

其中subset這個參數默認‘None’是指選擇所有列,即所有列的值都相同我才認為這兩行是重復的,

也可以自定義為其中一部分列變量名,比如subset=['name','sex','age']。

keep參數中'first'和‘last’會根據index的前后產生不同的效果。參數False會去除所有重復行。

舉個栗子:

        name       sex            age

0    coco          female        7

1      lily           female        7

2     joe           male          15

3     coco        female        7

 DataFrame.drop_duplicates(subset = None, keep = 'first'),產生的結果如下:

 

        name       sex         age

0        coco    female         7

1      lily         female        7

2     joe         male          15

若使用代碼DataFrame.drop_duplicates(subset = None, keep = 'last'),結果如下:

 

        name       sex         age

1      lily         female        7

2     joe         male          15

3      coco    female        7

發現不考慮index以及行的順序,效果與參數first相同。

若使用代碼DataFrame.drop_duplicates(subset = None, keep = False), 則把相同的行全部刪除,結果如下:

 

        name       sex         age

1      lily         female        7

2     joe         male          15

所有重復的行都被刪除,沒有保留。

 

若使用代碼DataFrame.drop_duplicates(subset = ['sex' , 'age'] , keep = False), 結果如下:

 

        name       sex         age

2     joe         male          15

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM