2017-11-30 4 views
0

을 추가합니다. 동시에, 나는 소스 파일을 확인하고 가공 것들로 비교 - 경우에 소스 파일의 추가 라인이있다, 나는 대상 파일에 그 새로운 라인을 추가 할 계획입니다. 내가 파일을 추가하고 겹쳐 쓰지 않으려 고하는 이유는 이전에 처리 된 행의 UUID를 유지해야하기 때문입니다. 행 개수가 원본과 대상 파일 같은 경우 파이썬 팬더 내가 .csv 파일에 UUID의 열을 추가하고 사건을 가지고 dataframe

그래서 라인을 추가하는 경우, 나는 확인한다. 그렇지 않은 경우 대상 파일의 행 수와 같은 행 번호의 데이터 (원본 파일의 데이터)로 새 데이터 프레임을 만듭니다. 그 시점에서

, 나는 대상 dataframe에 새로 만든 dataframe를 추가하려고하지만 실패 유지합니다. 나는 다음과 같은 오류받을 : 내가 사용하고

> RuntimeWarning: '<' not supported between instances of 'int' and 
> 'str', sort order is undefined for incomparable objects result = 
> result.union(other) 

코드 아래입니다 :

import os, uuid 
import pandas as pd 


def process_files(): 
    source_dir = "C:\\Projects\\test\\raw" 
    destination_dir = "C:\\Projects\\test\\processed" 

    for file_name in os.listdir(source_dir): 
     if file_name.endswith((".csv", ".new")): 
      df_source = pd.read_csv(source_dir + "/" + file_name, sep=";") 

      if os.path.isfile(destination_dir + "/" + file_name): 
       df_destination = pd.read_csv(destination_dir + "/" + file_name, sep=",", header=None) 

       if df_source.shape[0] != (df_destination.shape[0]): 
        df_newlines = pd.read_csv(source_dir + "/" + file_name, sep=";", skiprows=df_destination.shape[0], header=None) 
        df_newlines.insert(0, "uu_id", pd.Series([uuid.uuid4() for i in range(len(df_newlines))])) 
        df_destination.append(df_newlines, ignore_index=True) 
        df_destination.to_csv(destination_dir + "/" + file_name, sep=",", header=False, mode="w", index=False) 
       else: 
        continue 
      else: 
       df_source.insert(0,"uu_id", pd.Series([uuid.uuid4() for i in range(len(df_source))])) 
       df_source.to_csv(destination_dir + "/" + file_name, sep=",", header=False, mode="w", index=False) 
     else: 
      continue 


process_files() 

난 둘 dataframes의 dtypes을 확인했다, 그들은 열 당 일치합니다. 또한 같은 열을 갖도록 열의 이름을 변경해야하지만 트릭은 수행하지 않습니다. 내가 추가로 잘못하고있는 어떤 아이디어 (추가 행을 주석 처리하면 문제없이 스크립트가 실행됩니다)?

이 보스 티안에게,

답변

1

책임의 한계와 법적 고지 당신과 안부 감사합니다 인해 명성 포인트의 부족, 내가

일반적으로 코멘트 할 수 없다하고, append 장소에서 사용되지 않습니다. 따라서, 나는 그것을이다

df_destination = df_destination.append(df_newlines, ignore_index=True) 

희망을 말을 건의 할 것입니다.

이 외에도에서, 나는 파일을 검색 할 수 os.walkfnmatch을 사용하는 것이 좋습니다.

+0

안녕하세요! 도움을 주셔서 감사합니다 - 그것은 내 문제를 실제로 해결합니다. 다른 한편으로는, 그 동안에 해결 방법을 만들었습니다 (누구나 유용 할 것입니다). append()를 사용하는 대신 누락 된 행이있는 새로운 데이터 프레임을 만든 다음 모드 매개 변수를 "a"로 설정하여 .to_csv()를 사용했습니다. 안부 인사, Bostjan – Bostjan