Python处理单元格内连续出现的重复词语
1. 环境配置
导入必要的库
import pandas as pd # 数据处理库
import re # 正则表达式库
import jieba # 中文分词库
2. 处理字符串
-
检查输入有效性 :如果输入是 NaN、None 或非字符串类型,则直接返回输入。
-
单字符的删重 :使用正则表达式 re.sub(r’(.)\1+‘, r’\1’, text) 替换连续相同的单字符。例如,将 “哈哈” 替换为 “哈”。
-
使用 jieba 进行分词 :jieba.lcut(text) 将字符串分词为一个词语列表。
-
反转词语列表:words.reverse() 反转词语列表,以便从后向前处理。
-
从后往前去重:使用一个集合 seen 来跟踪已见过的词语。遍历反转后的词语列表,如果词语不在 seen 中,则添加到 final_words 列表,并标记为已见。
-
恢复词语顺序 :final_words.reverse() 反转最终的词语列表,恢复原来的顺序。
-
连接词语成字符串:使用空字符串 ‘’ 连接去重后的词语列表,并返回结果。
反转是为了一个从前往后删,一个从后往前删,“太多东西了爱了爱了”从前前面删会变成“了爱”
3. 处理表格文件
- 读取 Excel 文件 :使用 pd.read_excel() 读取 Excel 文件
- 检查列名是否存在
- 应用字符串处理函数 :用 apply 方法将 remove_duplicates_from_end 函数应用到指定列
- 返回处理后的 DataFrame
import pandas as pd
import re
import jiebadef remove_duplicates_from_end(text):if pd.isna(text) or text is None or not isinstance(text, str):return text# 1. 删除单字符的连续重复text = re.sub(r'(.)\1+', r'\1', text)# 2. 使用 jieba 进行分词words = jieba.lcut(text)# 3. 反转词语列表,以便从后向前处理words.reverse()# 4. 创建一个新的列表,用于存储去重后的词语seen = set()final_words = []# 5. 遍历反转后的词语,从后往前去重for word in words:if word not in seen:final_words.append(word)seen.add(word)# 6. 反转最终的词语顺序,恢复原来的顺序final_words.reverse()# 7. 通过空字符串连接成结果字符串并返回return ''.join(final_words)def process_excel(filepath, column_name='content'):try:df = pd.read_excel(filepath)except Exception as e:print(f"读取 Excel 文件失败: {e}")return Noneif column_name not in df.columns:print(f"列名 '{column_name}' 不存在于 Excel 文件中。")return None# 应用 remove_duplicates_from_end 函数到指定列df['处理后'] = df[column_name].apply(remove_duplicates_from_end)return dffilepath = 'data.xlsx' # 替换为你的 Excel 文件路径
column_name = 'content' # 替换为你的列名
df_processed = process_excel(filepath, column_name)
if df_processed is not None:print(df_processed)try:df_processed.to_excel('data_processed.xlsx', index=False) print("处理后的数据已保存到 data_processed.xlsx")except Exception as e:print(f"保存 Excel 文件失败: {e}")
暂时只能删成这样,那个“好多好多”还是“好多好多”。