2016-07-09 13 views
-1

私は、PostgreSQLにCSVのバッチをインポートし、常に不足しているデータの問題に実行しようとしています:は、PythonでCSVから行を削除

psycopg2.DataError: missing data for column "column_name" CONTEXT:
COPY table_name, line where ever in the CSV that data wasn't
recorded, and here are data values up to the missing column
.

があります時々行に書き込まれたデータの完全なセットを取得する方法はありません。私はそのファイルをそのまま扱わなければなりません。データがどの列にも記録されていない場合、行を削除する方法を考えようとしています。ここで私が持っているものだ。残念ながら

file_list = glob.glob(path) 

for f in file_list: 
    filename = os.path.basename(f) #get the file name 
    arc_csv = arc_path + filename #path for revised copy of CSV 

    with open(f, 'r') as inp, open(arc_csv, 'wb') as out: 
     writer = csv.writer(out) 
     for line in csv.reader(inp): 
      if "" not in line: #if the row doesn't have any empty fields 
       writer.writerow(line) 

    cursor.execute("COPY table_name FROM %s WITH CSV HEADER DELIMITER ','",(arc_csv,)) 
+0

私は15歳未満の担当者がいるので、回答は表示されません。おかげで、カントとアレクセ! – Jeff

答えて

0

あなたは欠損値を持つ行を削除するためにパンダを使用することができます。

import glob, os, pandas 

file_list = glob.glob(path) 

for f in file_list: 
    filename = os.path.basename(f) 
    arc_csv = arc_path + filename 
    data = pandas.read_csv(f, index_col=0) 
    ind = data.apply(lambda x: not pandas.isnull(x.values).any(), axis=1) 
    #^provides an index of all rows with no missing data 
    data[ind].to_csv(arc_csv) # writes the revised data to csv 

あなたがしている場合ただし、これは遅い得ることができます大規模なデータセットを扱う

EDIT - pandas.read_csv()に引数としてindex_col=0を追加して、インデックス列の追加を防止します。これは、csvの最初の列を既存の索引として使用します。最初の列をインデックスとして使用しない理由がある場合は、0を別の列の番号に置き換えます。

+0

ありがとう!番号が付けられた行(0 - 最後の行番号)を持つ新しい列(列A)を作成する点を除いて、ちょうど正しいと思われます。今パンダでもっと読む。 – Jeff

+0

私の悪い、追加の列の問題を防ぐために自分の投稿を編集しました。 Pandasのデータフレームはインデックスを必要とするため、指定されていない場合は新しいものが生成されます。 – olegsson

+0

もう一度ありがとうございます。私はパンダで読んでいるような気がしていて、ここであなたは答えに時間がない!私はまた、アレクセが私の注意を引いた問題についても読んでいます。 – Jeff

0

、あなたがテーブルやカラム名をパラメータ化することはできません。書式設定文字列を使用しますが、適切に値をエスケープ/検証することを確認してください:

cursor.execute("COPY table_name FROM {column_name} WITH CSV HEADER DELIMITER ','".format(column_name=arc_csv)) 
関連する問題