programing

drop_certificates가 판다에서 작동하지 않습니까?

yellowcard 2023. 8. 18. 22:29
반응형

drop_certificates가 판다에서 작동하지 않습니까?

제 코드의 목적은 엑셀 파일 2개를 가져와서 비교한 후 새로운 엑셀 파일로 출력하는 것입니다.

그러나, 모든 데이터를 연결한 후, 그리고 사용한 후.drop_duplicates콘솔에서 코드를 승인합니다.그러나 새 엑셀 파일로 인쇄할 때 중복되는 내용은 당일에도 남아 있습니다.

내가 뭘 빼놓았나요?뭔가가 그것을 무효화하는 것입니까?drop_duplicates기능?

내 코드는 다음과 같습니다.

import datetime
import xlrd
import pandas as pd
#identify excel file paths
filepath = r"excel filepath"
filepath2 = r"excel filepath2"
#read relevant columns from the excel files
df1 = pd.read_excel(filepath, sheetname="Sheet1", parse_cols= "B, D, G, O")
df2 = pd.read_excel(filepath2, sheetname="Sheet1", parse_cols= "B, D, F, J")
#merge the columns from both excel files into one column each respectively
df4 = df1["Exchange Code"] + df1["Product Type"] + df1["Product Description"] + df1["Quantity"].apply(str)
df5 = df2["Exchange"] + df2["Product Type"] + df2["Product Description"] + df2["Quantity"].apply(str)
#concatenate both columns from each excel file, to make one big column containing all the data
df = pd.concat([df4, df5])
#remove all whitespace from each row of the column of data
df=df.str.strip()
df=["".join(x.split()) for x in df] 
#convert the data to a dataframe from a series
df = pd.DataFrame({'Value': df}) 
#remove any duplicates
df.drop_duplicates(subset=None, keep="first", inplace=False)
#print to the console just as a visual aid
print(df)
#print the erroneous entries to an excel file
df.to_excel("Comparison19.xls") 

당신이 가지고 있는inplace=False그래서 당신은 수정하지 않습니다.df둘 중 하나를 원합니다.

 df.drop_duplicates(subset=None, keep="first", inplace=True)

또는

 df = df.drop_duplicates(subset=None, keep="first", inplace=False)

저는 방금 이 문제를 겪었고, 이것은 해결책이 아니었습니다.

그것은 문서에 있을 수 있습니다 - 저는 분명히 찾아보지 않았습니다 - 그리고 결정적으로 이것은 오직 날짜 기반의 고유 행을 다룰 때만 가능합니다: '날짜' 열은 그렇게 포맷되어야 합니다.

만약에date데이터는 판다 개체 dtype입니다.drop_duplicates작동하지 않음 - 을 수행pd.to_datetime첫번째.

Datetime을 사용하는 경우데이터 프레임에서 인덱스를 작성하면 작동하지 않습니다.

df.drop_duplicates(subset=None, keep="first", inplace=True)

대신 다음을 사용할 수 있습니다.

df = df[~df.index.duplicated()]

먼저 인덱스가 dtype이 아닌지 확인합니다.object그렇지만datetime64를 사용하여 확인할 수 있습니다.df.index먼저 다음을 사용하여 인덱스를 변환해야 할 수 있습니다.

df = pd.to_datetime(df.index)

미래에는 누구에게나 도움이 될 수 있습니다.

날짜가 포함된 열이 있었는데, 중복 항목을 제거하려고 했지만 성공하지 못했습니다.이후 작업을 위해 열을 날짜로 유지하는 것이 중요하지 않은 경우 열을 개체 유형에서 문자열로 변환했습니다.

df = df.astype('str')

그리고 @Keith answers를 공연했습니다.

df = df.drop_duplicates(subset=None, keep="first", inplace=False)

의 사용inplace=False팬더에게 복제품이 떨어진 새 데이터 프레임을 반환하라고 합니다. 그래서 당신은 그것을 다시 할당해야 합니다.df:

df = df.drop_duplicates(subset=None, keep="first", inplace=False)

또는inplace=True판다에게 현재 데이터 프레임에서 복제품을 삭제하라고 말합니다.

df.drop_duplicates(subset=None, keep="first", inplace=True)

여기가 그것을 놓기에 좋은 장소인지 확실하지 않습니다.하지만 최근에 알게 된 사실은.drop_duplicates()행을 삭제하려면 모든 하위 집합에 일치하는 항목이 있어야 합니다.

따라서 하나의 값만을 기준으로 여러 개를 삭제하는 경우 이 코드를 사용했습니다.

no_duplicates_df = df.drop_duplicates(subset=['email'], keep="first", inplace=False)                     # Delete duplicates in email
no_duplicates_df = no_duplicates_df.drop_duplicates(subset=['phonenumber'], keep="first", inplace=False) # Delete duplicates in phonenumber

저도 같은 문제가 있었지만, 다른 이유가 있었습니다.

한 데이터 프레임을 다른 데이터 프레임에 추가한 후 ID(정수)를 기반으로 데이터 중복 제거를 원했습니다.그러나 추가 시 해당 열의 유형이 부동으로 변경되어 작동하지 않았습니다(https://github.com/pydata/pandas/issues/6485) 참조).drop_duplicates를 실행하기 전에 다음을 실행하여 수정했습니다.

df = df.astype({'id': 'int64'})

언급URL : https://stackoverflow.com/questions/46489695/drop-duplicates-not-working-in-pandas

반응형