使用pandas過濾文件重復行


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)

 


免責聲明!

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



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