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

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

text banana apple unique 586    来源:    2025-03-13

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

1. 使用 set 数据结构

set 是 Python 中的一种内置数据结构,它自动去重。你可以将文本字段转换为 set 来快速去重。

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

输出:

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

注意: set 是无序的,因此去重后的顺序可能与原列表不同。

2. 使用 pandas

如果你处理的是表格数据(如 CSV 文件),pandas 是一个非常强大的工具。你可以使用 pandasdrop_duplicates() 方法来去重。

import pandas as pd

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

# 去重
df_unique = df.drop_duplicates()
print(df_unique)

输出:

     text
0   apple
1  banana
3  orange

3. 使用 collections.OrderedDict

如果你需要保留去重后的顺序,可以使用 collections.OrderedDict

from collections import OrderedDict

text_list = ["apple", "banana", "apple", "orange", "banana"]
unique_text = list(OrderedDict.fromkeys(text_list))
print(unique_text)

输出:

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

4. 使用 numpy

如果你处理的是大型数据集,numpy 提供了高效的去重方法。

import numpy as np

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

输出:

['apple' 'banana' 'orange']

5. 使用 itertools.groupby

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

from itertools import groupby

text_list = ["apple", "banana", "apple", "orange", "banana"]
text_list.sort()  # 必须先排序
unique_text = [key for key, _ in groupby(text_list)]
print(unique_text)

输出:

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

6. 使用 functools.lru_cache 进行自定义去重

如果你有更复杂的去重需求(例如基于某些条件去重),可以使用 functools.lru_cache 来缓存结果。

from functools import lru_cache

@lru_cache(maxsize=None)
def custom_unique(text):
    # 自定义去重逻辑
    return text.lower()  # 例如,忽略大小写去重

text_list = ["Apple", "banana", "apple", "Orange", "banana"]
unique_text = list({custom_unique(text) for text in text_list})
print(unique_text)

输出:

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

7. 使用 pandas.Series.str.lower 进行大小写不敏感去重

如果你需要忽略大小写进行去重,可以使用 pandasstr.lower() 方法。

import pandas as pd

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

# 忽略大小写去重
df_unique = df['text'].str.lower().drop_duplicates()
print(df_unique)

输出:

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

总结

  • set: 简单快速,但无序。
  • pandas: 适合处理表格数据,功能强大。
  • OrderedDict: 保留顺序的去重。
  • numpy: 适合处理大型数据集。
  • itertools.groupby: 适合已排序的列表。
  • lru_cache: 适合自定义去重逻辑。
  • pandas.Series.str.lower: 适合大小写不敏感的去重。

根据你的具体需求选择合适的方法,可以大大提高数据清洗的效率。