Python 熊猫:无法检测两列中的重复项
我正在尝试从两列中删除重复项。如下图所示,阿拉巴马州和阿拉斯加 但是,当我在下面查询时,它不会检测到重复项。使用drop_副本时也是如此。我已经检查过没有空格,因为它们也有相同的字符长度。有人知道怎么了吗 编辑:在下面添加了一个示例代码。结果是一样的,没有空格,无法检测重复项Python 熊猫:无法检测两列中的重复项,python,pandas,duplicates,Python,Pandas,Duplicates,我正在尝试从两列中删除重复项。如下图所示,阿拉巴马州和阿拉斯加 但是,当我在下面查询时,它不会检测到重复项。使用drop_副本时也是如此。我已经检查过没有空格,因为它们也有相同的字符长度。有人知道怎么了吗 编辑:在下面添加了一个示例代码。结果是一样的,没有空格,无法检测重复项 list1=['Alabama','Alabama','Alabama','Alabama','Alaska'] list2=['Alabama','Auburn','Florence','Jacksonville','A
list1=['Alabama','Alabama','Alabama','Alabama','Alaska']
list2=['Alabama','Auburn','Florence','Jacksonville','Alaska']
df=pd.DataFrame(list1, columns=['States'])
df['Region']=pd.DataFrame(list2)
df.duplicated()
我认为您需要比较列:
df[df['States'].ne(df['Region'])]
时间:
df = pd.concat([df]*100000).reset_index(drop=True)
In [353]: %timeit (df[df['States'].ne(df['Region'])])
10 loops, best of 3: 23.7 ms per loop
In [354]: %timeit (df[df['States'] != df['Region']])
10 loops, best of 3: 88.6 ms per loop
我认为您需要比较列:
df[df['States'].ne(df['Region'])]
时间:
df = pd.concat([df]*100000).reset_index(drop=True)
In [353]: %timeit (df[df['States'].ne(df['Region'])])
10 loops, best of 3: 23.7 ms per loop
In [354]: %timeit (df[df['States'] != df['Region']])
10 loops, best of 3: 88.6 ms per loop
看起来您希望直接比较列,这可以使用不等式轻松完成:
In [93]:
df[df['States'] != df['Region']]
Out[93]:
States Region
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
duplicated查找单列或所有列中的重复值,在此处失败,因为“Alabama”在一行中仅显示一次,如果在多行中显示,则会将其删除
注意,有一种内置方法,它意味着“不等于”,该方法速度更快,但可读性可能较低。看起来您想要直接比较列,您可以使用不等式轻松地进行比较:
In [93]:
df[df['States'] != df['Region']]
Out[93]:
States Region
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
duplicated查找单列或所有列中的重复值,在此处失败,因为“Alabama”在一行中仅显示一次,如果在多行中显示,则会将其删除
注意,有一种内置方法,它意味着不等于更快但可读性可能更低的方法pd.DataFrame.duplicated方法检测整个数据帧中的重复行。但是,它不会检测您所需的行中的重复值。pd.DataFrame.duplicated方法检测整个数据帧中的重复行。但是,它不会在您需要的行中检测到重复的值。如果要删除,可以获取索引并按索引删除它
list1 = ['Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alaska']
list2 = ['Alabama', 'Auburn', 'Florence', 'Jacksonville', 'Alaska']
df = pd.DataFrame(list1, columns=['States'])
df['Region'] = pd.DataFrame(list2)
index_list = df[df['States'] == df['Region']].index.tolist()
df = df.drop(df.index[index_list])
print(df)
输出如下
States Region
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
df.drop_按行重复工作,因此如果有多行包含相同的值,则会将其删除
下面是一个例子
在删除复制之前
States Region
0 Alabama Alabama
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
4 Alaska Alaska
5 Alaska Alaska
6 Alaska Alaska
第4、5、6行完全相同,因此除第4行之外的所有行都将被删除,在drop_重复之后,df将如下所示
States Region
0 Alabama Alabama
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
4 Alaska Alaska
如果要删除,可以获取索引并按索引删除它
list1 = ['Alabama', 'Alabama', 'Alabama', 'Alabama', 'Alaska']
list2 = ['Alabama', 'Auburn', 'Florence', 'Jacksonville', 'Alaska']
df = pd.DataFrame(list1, columns=['States'])
df['Region'] = pd.DataFrame(list2)
index_list = df[df['States'] == df['Region']].index.tolist()
df = df.drop(df.index[index_list])
print(df)
输出如下
States Region
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
df.drop_按行重复工作,因此如果有多行包含相同的值,则会将其删除
下面是一个例子
在删除复制之前
States Region
0 Alabama Alabama
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
4 Alaska Alaska
5 Alaska Alaska
6 Alaska Alaska
第4、5、6行完全相同,因此除第4行之外的所有行都将被删除,在drop_重复之后,df将如下所示
States Region
0 Alabama Alabama
1 Alabama Auburn
2 Alabama Florence
3 Alabama Jacksonville
4 Alaska Alaska
您需要发布原始数据和代码,以便其他人尝试复制此内容,您发布了一个没有人可以复制的图像,其中没有重复的示例代码!谢谢您需要发布原始数据和代码,以便其他人尝试复制此内容,您发布了一个没有人可以复制的图像,其中没有重复的示例代码!谢谢嗨,我查过了。。。没有空格~已经添加了一个示例代码供大家尝试过~对不起,我错了。我在更大的数据帧中添加了另一个更快的解决方案。哦,太酷了~我会接受urs作为答案,因为它更快~谢谢uHi,我已经检查过了。。。没有空格~已经添加了一个示例代码供大家尝试过~对不起,我错了。我在更大的数据帧中添加了另一个更快的解决方案。哦,太酷了~将接受urs作为答案,因为它更快~谢谢udamn,谢谢!为什么熊猫不放弃重复工作呢?有什么想法吗?@Jake请告诉我关于drop\u DuplicateSoh的最新答案,好的~谢谢。你描述得很清楚~非常感谢你的帮助,谢谢!为什么熊猫不放弃重复工作呢?有什么想法吗?@Jake请告诉我关于drop\u DuplicateSoh的最新答案,好的~谢谢。你把它描述得很清楚~非常感谢你的帮助