excel drop_duplicates在Pandas中不起作用?

b09cbbtk  于 2022-11-26  发布在  其他
关注(0)|答案(7)|浏览(171)

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

kd3sttzy1#

您已经得到了inplace=False,所以您没有修改df

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

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

zmeyuzjn2#

我刚刚遇到了这个问题,这不是解决办法。
它可能在文档中--我承认我没有看过--而且关键的是,只有在处理基于日期的唯一行时才这样做:“日期”列必须按此格式设置。
如果date数据是panda object dtype,则drop_duplicates将无法工作-请先执行pd.to_datetime

c6ubokkw

c6ubokkw3#

如果在DataFrame中使用DatetimeIndex,则起作用

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

相反,可以用途:

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

dffbzjpn4#

可能会在未来帮助任何人。
我有一个包含日期的列,我试图删除其中的重复项,但没有成功。如果将该列保留为日期以便进一步操作并不重要,我将该列从对象类型转换为字符串类型。

df = df.astype('str')

“然后我表演了”基思回答

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

6yt4nkrj5#

inplace=False的使用告诉Pandas返回一个删除了重复数据的新 Dataframe ,所以你需要把它重新赋给df

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

inplace=True,告诉Pandas丢弃当前 Dataframe 中的副本

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

yfwxisqw6#

不确定是否适合放在这里,但我最近了解到,.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
wswtfjt7

wswtfjt77#

我也有同样的问题,但原因不同。
在将一个 Dataframe 附加到另一个 Dataframe 之后,我想基于id(整数)进行重复数据删除。但是,附加操作将该列的类型更改为float,因此不起作用(请参见https://github.com/pydata/pandas/issues/6485)。我在运行drop_duplicates之前运行以下命令修复了此问题:
df = df.astype({'id': 'int64'})

相关问题