2016-04-25 3 views
2

大量の汚れたデータがある大規模なCSVファイルがあります。絶対に必要ではない値。csvファイルから望ましくない値を削除するための高速で正確で信頼性の高い方法

Here私が話しているファイルです。

それは構成要素を有する:

WebsiteTitleStart DateEmployerLocationlatlonCountrySkills11Jobs

が、私はすべてが、消し去るしたいと思います:

EmployerLocationCountryJobs

このため独自に適した特定のツールはありますが仕事?

多分、誰かが仕事を終えることができる便利なPythonスクリプトを持っていますか?

+4

1回限りの場合は、Excelで開いてその列を削除できますか? – TigerhawkT3

+0

私はlibre officeしか持っていませんが、これは虚偽の叙事詩です。IMHO-今、私はいくつかのPythonスクリプトを繰り返し実行しているので、データが変更され、Pythonが高速になることがあります。私は本当にわからない –

+1

Googleドライブ?それは非常に速く仕事をします:) – Adib

答えて

4

Pythonで一時ファイルに書き込んだ後、元のファイルを置き換えて簡単に行うことができます。

より一般的なアプローチについては
import csv 
from operator import itemgetter 
from tempfile import NamedTemporaryFile 
from shutil import move 

with open("edsa_data.csv") as f, NamedTemporaryFile(dir=".", delete=False) as tmp: 
    # itertools.imap python2 
    csv.writer(tmp).writerows(map(itemgetter(3, 5, 7, 9), csv.reader(f))) 
move(tmp.name, "edsa_data.csv") 

:あなたは9月を渡すことができkwargsからの場合

import csv 
from operator import itemgetter 
from tempfile import NamedTemporaryFile 
from shutil import move 




def keep_columns(csv_f, keep_cols, **kwargs): 
    with open(csv_f) as f, NamedTemporaryFile("w", dir=".", delete=False) as tmp: 
     csv.writer(tmp, **kwargs).writerows(itemgetter(*keep_cols)(row) 
              for row in csv.reader(f, **kwargs)) 
    move(tmp.name, csv_f) 


keep_columns("edsa_data.csv", (3, 4, 7, 9)) 

= ""skipinitialspace = Trueのなど。

+0

何かの理由でそれは 'move(move(tmp.name、" edsa_data.csv ")'のようなものが好きではありません –

+0

彼は10行目について "無効な構文"と言います –

+0

ah- never何も変わっていないのですか? –

2

メンテナンスを容易にするためには、 DictReader/DictWriterのペアを使用します。

import csv 
import sys 

with open(sys.argv[1], 'r') as csv_infile: 
    with open(sys.argv[2], 'w') as csv_outfile: 
     csv_in = csv.DictReader(csv_infile) 
     csv_out = csv.DictWriter(
      csv_outfile, 
      ['Employer','Location','Country','Jobs'], 
      extrasaction='ignore') 
     csv_out.writeheader() 
     csv_out.writerows(csv_in) 
関連する問題