pandas過濾文件重復行
import pandas as pd import os import argparse import random import string # 增加參數 parser = argparse.ArgumentParser( description="過濾文件重復行,使用file_duplicate filename",add_help = True) parser.add_argument("filename", type=str, help="請輸入文件名,如filename.txt: ") parser.add_argument("-p","--param",dest = "sep", type=str, help="請輸入分隔符,如'|',默認為'|' " ,default = '|',required=False) args = parser.parse_args() f_name = args.filename # 獲得參數值 sep = args.sep # 獲得參數值 # usecols=[0,1,2] print('參數值為 {} {}'.format(f_name,sep)) if not os.path.exists(f_name): print("%s文件不存在" % f_name) else: df = pd.read_csv(f_name, sep=sep,skiprows=1,header=None,usecols=[0,1,2]) # 指定字符串None為Nan """ 文件名,分隔符,忽略行數,首行是否索引,截取列 """ print("前5行") print(df.head(5)) print('過濾前行列數') print(df.shape) # 得到幾行幾列(637, 3) rowNum=df.shape[0] # 不包括df表頭 colNum=df.columns.size print('rowNum ={},colNum={}'.format(rowNum,colNum)) # 查數據類型 print(df.dtypes) # 數據類型轉換 df[0] = df[0].astype("object") df[1] = df[1].astype("object") print(df.dtypes) # drop_duplicats參數說明: # 參數subset # subset用來指定特定的列,默認所有列 # 參數keep # keep可以為first和last,表示是選擇最前一項還是最后一項保留,默認first # 參數inplace # inplace是直接在原來數據上修改還是保留一個副本,默認為False df.drop_duplicates(subset=[0,1,2], keep='first',inplace=True) print('過濾后行列數') print(df.shape)# 得到幾行幾列(632, 3) # 生成csv文件 f_new_name = "%s.new" % f_name + ''.join(random.sample(string.digits, 6)) df.to_csv(f_new_name,sep='|',header=False ,index=False)