插件窝 干货文章 Python 数据清洗之文本字段高效去重技巧指南

Python 数据清洗之文本字段高效去重技巧指南

banana apple text unique 792    来源:    2025-03-14

在数据清洗过程中,文本字段的去重是一个常见的需求。Python 提供了多种高效的方法来处理文本字段的去重问题。以下是一些常用的技巧和工具,可以帮助你高效地完成文本字段的去重任务。

1. 使用 set 数据结构

set 是 Python 中的一种内置数据结构,它自动去重。你可以将文本字段转换为 set,然后再转换回列表。

text_list = ["apple", "banana", "apple", "orange", "banana"]
unique_text_list = list(set(text_list))
print(unique_text_list)

输出:

['banana', 'orange', 'apple']

2. 使用 pandas

如果你处理的是 DataFrame 中的文本字段,pandas 提供了非常方便的去重方法。

import pandas as pd

data = {'text': ["apple", "banana", "apple", "orange", "banana"]}
df = pd.DataFrame(data)

# 去重
df_unique = df['text'].drop_duplicates()
print(df_unique)

输出:

0     apple
1    banana
3    orange
Name: text, dtype: object

3. 使用 collections.Counter

collections.Counter 可以用来统计每个元素的出现次数,并且可以用于去重。

from collections import Counter

text_list = ["apple", "banana", "apple", "orange", "banana"]
unique_text_list = list(Counter(text_list).keys())
print(unique_text_list)

输出:

['apple', 'banana', 'orange']

4. 使用 numpy

numpy 也提供了去重的方法,特别适合处理大型数据集。

import numpy as np

text_list = ["apple", "banana", "apple", "orange", "banana"]
unique_text_list = np.unique(text_list)
print(unique_text_list)

输出:

['apple' 'banana' 'orange']

5. 使用 itertools.groupby

如果你需要对排序后的列表进行去重,可以使用 itertools.groupby

from itertools import groupby

text_list = ["apple", "banana", "apple", "orange", "banana"]
text_list.sort()
unique_text_list = [key for key, group in groupby(text_list)]
print(unique_text_list)

输出:

['apple', 'banana', 'orange']

6. 使用 frozenset 处理嵌套列表

如果你的文本字段是嵌套列表,可以使用 frozenset 来进行去重。

nested_list = [["apple", "banana"], ["apple", "orange"], ["banana", "apple"]]
unique_nested_list = list(map(list, set(map(frozenset, nested_list))))
print(unique_nested_list)

输出:

[['banana', 'apple'], ['apple', 'orange']]

7. 使用 pandasdrop_duplicates 方法

如果你有一个包含多个列的 DataFrame,并且只想根据某一列去重,可以使用 drop_duplicates 方法。

import pandas as pd

data = {'text': ["apple", "banana", "apple", "orange", "banana"], 'count': [1, 2, 1, 3, 2]}
df = pd.DataFrame(data)

# 根据 'text' 列去重
df_unique = df.drop_duplicates(subset=['text'])
print(df_unique)

输出:

    text  count
0  apple      1
1  banana      2
3  orange      3

8. 使用 pandasduplicated 方法

duplicated 方法可以标记重复的行,然后你可以根据这些标记来过滤数据。

import pandas as pd

data = {'text': ["apple", "banana", "apple", "orange", "banana"]}
df = pd.DataFrame(data)

# 标记重复的行
df['is_duplicate'] = df.duplicated(subset=['text'])

# 过滤掉重复的行
df_unique = df[~df['is_duplicate']]
print(df_unique)

输出:

    text  is_duplicate
0  apple         False
1  banana         False
3  orange         False

9. 使用 pandasgroupby 方法

如果你需要对某一列进行分组并保留第一个或最后一个出现的值,可以使用 groupby 方法。

import pandas as pd

data = {'text': ["apple", "banana", "apple", "orange", "banana"], 'count': [1, 2, 1, 3, 2]}
df = pd.DataFrame(data)

# 根据 'text' 列分组并保留第一个出现的值
df_unique = df.groupby('text').first().reset_index()
print(df_unique)

输出:

    text  count
0  apple      1
1  banana      2
2  orange      3

10. 使用 pandasdrop_duplicates 方法保留最后一个出现的值

如果你希望保留最后一个出现的值,可以在 drop_duplicates 方法中设置 keep='last'

import pandas as pd

data = {'text': ["apple", "banana", "apple", "orange", "banana"], 'count': [1, 2, 1, 3, 2]}
df = pd.DataFrame(data)

# 根据 'text' 列去重并保留最后一个出现的值
df_unique = df.drop_duplicates(subset=['text'], keep='last')
print(df_unique)

输出:

    text  count
2  apple      1
4  banana      2
3  orange      3

总结

以上是一些常用的 Python 文本字段去重技巧。根据你的具体需求和数据规模,可以选择合适的方法。对于小型数据集,setpandasdrop_duplicates 方法通常足够高效。对于大型数据集,numpypandas 的高级功能可能更适合。