drop_duplicates在熊猫中不起作用?

时间:2017-09-29 13:19:13

标签: python excel pandas duplicates

我的代码的目的是导入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") 

5 个答案:

答案 0 :(得分:5)

您已inplace=False,因此您未修改df。你想要

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

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

答案 1 :(得分:2)

如果您在DataFrame中使用DatetimeIndex,则有效

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

一个人可以使用:

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

答案 2 :(得分:1)

使用inplace=False告诉pandas返回丢弃了重复项的新数据框,因此您需要将其分配回df

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

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

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

答案 3 :(得分:1)

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

它可能在文档中-我承认还没有看过-至关重要的是,这仅在处理基于日期的唯一行时:“日期”列的格式必须这样。

如果date数据是熊猫 object dtype,则drop_duplicates将不起作用-首先执行pd.to_datetime

答案 4 :(得分:0)

将来可能会帮助任何人。

我有一列带有日期的列,在该列中我尝试删除重复项而没有成功。 如果将列作为后续操作的日期并不重要,我将列从类型对象转换为字符串。

df = df.astype('str')

然后我执行@Keith答案

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