2016-07-09 5 views
-1

내가 PostgreSQL을에 CSV의의 배치를 수입하고 지속적으로 누락 된 데이터에 문제로 실행하려고 해요 :는 파이썬으로 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 세 미만의 담당자가 있기 때문에 응답에 대한 나의 게시물 점수는 표시되지 않습니다. 덕분에 cant와 alecxe! – 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)) 
관련 문제