을 추가합니다. 동시에, 나는 소스 파일을 확인하고 가공 것들로 비교 - 경우에 소스 파일의 추가 라인이있다, 나는 대상 파일에 그 새로운 라인을 추가 할 계획입니다. 내가 파일을 추가하고 겹쳐 쓰지 않으려 고하는 이유는 이전에 처리 된 행의 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을 확인했다, 그들은 열 당 일치합니다. 또한 같은 열을 갖도록 열의 이름을 변경해야하지만 트릭은 수행하지 않습니다. 내가 추가로 잘못하고있는 어떤 아이디어 (추가 행을 주석 처리하면 문제없이 스크립트가 실행됩니다)?
이 보스 티안에게,
안녕하세요! 도움을 주셔서 감사합니다 - 그것은 내 문제를 실제로 해결합니다. 다른 한편으로는, 그 동안에 해결 방법을 만들었습니다 (누구나 유용 할 것입니다). append()를 사용하는 대신 누락 된 행이있는 새로운 데이터 프레임을 만든 다음 모드 매개 변수를 "a"로 설정하여 .to_csv()를 사용했습니다. 안부 인사, Bostjan – Bostjan