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
'programing' 카테고리의 다른 글
책임감 있는 MySQL 설치 플레이북 (0) | 2023.08.23 |
---|---|
응용 프로그램의 설정 번들에 응용 프로그램 버전 버전을 표시하려면 어떻게 해야 합니까? (0) | 2023.08.23 |
Yarn의 로컬 경로로 패키지를 설치하는 방법은 무엇입니까?패키지를 찾을 수 없습니다. (0) | 2023.08.18 |
스위프트를 사용하여 iOS 10에서 전화를 거는 방법은 무엇입니까? (0) | 2023.08.18 |
파이썬 또는 R을 사용하여 엑셀에서 대체 텍스트가 있는 그래프를 PDF로 내보내는 방법은 무엇입니까? (0) | 2023.08.18 |