2016-10-08 17 views
0

私の要件は、csvファイルから重複行を削除することですが、ファイルのサイズは11.3GBです。だから私はパンダとpythonファイルジェネレータをマークしました。pandas read_csvはPythonに比べて遅いのですか?

Pythonのファイルジェネレータ:

def fileTestInPy(): 
    with open(r'D:\my-file.csv') as fp, open(r'D:\mining.csv', 'w') as mg: 
     dups = set() 
     for i, line in enumerate(fp): 
      if i == 0: 
       continue 
      cols = line.split(',') 
      if cols[0] in dups: 
       continue 
      dups.add(cols[0]) 
      mg.write(line) 
      mg.write('\n') 

Python File Generator

使用パンダのread_csv:

import pandas as pd 
df = pd.read_csv(r'D:\my-file.csv', sep=',', iterator=True, chunksize=1024*128) 
def fileInPandas(): 
    for d in df: 
     d_clean = d.drop_duplicates('NPI') 
     d_clean.to_csv(r'D:\mining1.csv', mode='a') 

Pandas read_csv

詳細: サイズ:11.3ギガバイト 行:億、しかし、この5000万が Pythonのバージョンが重複している:3.5.2 パンダバージョン:0.19.0 RAM:8ギガバイト CPU:コアi5の2.60GHz

ここでは、Pythonファイルジェネレータを使用すると643秒がかかりましたが、私がパンダを使用したときには1756がかかりました。

私のシステムでもPythonファイルジェネレーターを使用してもハングしませんでしたが、パンダを使用したときにシステムがハングアップしました。

私はパンダで正しい方法を使用していますか? でも11.3GBファイルでソートしたいのですが、どうすればいいですか?

+0

スクリーンショットではなくコードフラグメントを直接投稿してください。それらは読みやすく、カット/ペーストが容易です。 – tdelaney

+0

@tdelaneyごめんなさい、今追加されました。 – dhana

答えて

1

パンダはこの作業には適していません。 11.3Gファイル全体をメモリに読み込み、すべての列で文字列からintへの変換を行います。私はあなたのマシンがダウンしたことに驚くことはありません!

行単位のバージョンははるかにリーンです。それは変換を行わず、重要でない列を見て気にせず、大きなデータセットをメモリに保持しません。それは仕事のためのより良いツールです。これは、Python 3.xのであり、あなたが知っていれば

def fileTestInPy(): 
    with open(r'D:\my-file.csv') as fp, open(r'D:\mining.csv', 'w') as mg: 
     dups = set() 
     next(fp) # <-- advance fp so you don't need to check each line 
       # or use enumerate 
     for line in fp: 
      col = line.split(',', 1)[0] # <-- only split what you need 
      if col in dups: 
       continue 
      dups.add(col) 
      mg.write(line) 
      # mg.write('\n') # <-- line still has its \n, did you 
           # want another? 

また、あなたのファイルは、ASCIIまたはUTF-8には、あなたがバイナリモードで両方のファイルを開き、変換を救うことができるです。

+0

このファイルのソート方法を教えてください。 – dhana

+0

出力ファイルをソートしますか? – tdelaney

+0

重複行を削除した後でも、出力ファイルは6GBです。 Pythonでソートを行うより良い方法はありますか? – dhana

関連する問題