drop_duplicates在熊猫中不起作用?

A. *_*gic 4 python excel duplicates pandas

我的代码的目的是导入2个Excel文件,比较它们,并将差异打印到新的Excel文件.

但是,在连接所有数据并使用该drop_duplicates函数之后,控制台会接受代码.但是,当打印到新的excel文件时,重复仍然在一天内.

我错过了什么吗?是否使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") 
Run Code Online (Sandbox Code Playgroud)

Mar*_*ann 13

如果您在 DataFrame 中使用 DatetimeIndex 这将不起作用

df.drop_duplicates(subset=None, keep="first", inplace=True)
Run Code Online (Sandbox Code Playgroud)

相反,人们可以使用:

df = df[~df.index.duplicated()]
Run Code Online (Sandbox Code Playgroud)

像drop_duplicates(),pandas.Index.duplicated支持keep可以设置为first(默认)的参数,last或False。

注意:首先确保索引不是 dtypeobject而是datetime64,您可以使用 进行检查df.index。您可能需要首先使用转换索引

df = pd.to_datetime(df.index)
Run Code Online (Sandbox Code Playgroud)

  • @WesleyKitlasten 正如 BAC83 所评论的那样,请确保索引的类型不是 _object_ 而是 _datetime64_。您可能需要先使用“pd.to_datetime(df.index)”转换索引 (2认同)

Wiz*_*zhi 12

将来可能会帮助任何人。

我有一个包含日期的列,我尝试删除重复项但没有成功。如果将列保留为进一步操作的日期并不重要,我会将列从类型对象转换为字符串。

df = df.astype('str')
Run Code Online (Sandbox Code Playgroud)

然后我表演了@Keith的回答

df = df.drop_duplicates(subset=None, keep="first", inplace=False)
Run Code Online (Sandbox Code Playgroud)


BAC*_*C83 9

我刚刚遇到了这个问题,这不是解决方案。

它可能在文档中 - 我承认我没有看过 - 关键是这只是在处理基于日期的唯一行时:“日期”列必须如此格式化。

如果date数据是 Pandas对象dtype,drop_duplicates则将不起作用 -pd.to_datetime首先执行。


Moh*_*OUI 5

使用 告诉inplace=Falsepandas 返回一个删除重复项的新数据帧,因此您需要将其分配回df:

df = df.drop_duplicates(subset=None, keep="first", inplace=False)
Run Code Online (Sandbox Code Playgroud)

或者inplace=True告诉 pandas 删除当前数据框中的重复项

df.drop_duplicates(subset=None, keep="first", inplace=True)
Run Code Online (Sandbox Code Playgroud)


小智 5

你已经inplace=False这样做了,你没有修改df.你也想要

 df.drop_duplicates(subset=None, keep="first", inplace=True)
Run Code Online (Sandbox Code Playgroud)

要么

 df = df.drop_duplicates(subset=None, keep="first", inplace=False)
Run Code Online (Sandbox Code Playgroud)