如何识别并提取DataFrame单元格重复字符串,同时修正内容
解决方案
步骤说明
我们可以通过自定义处理函数结合Pandas完成需求:识别每行重复字符串、提取重复项、修正名称,最终生成目标格式的DataFrame。
代码实现
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'id': [1, 2, 3], '另一表头': ['JohnWalter walter', 'AdamSmith Smith', 'Steve Rogers rogers'] }) # 重命名原列名为目标中的"名称" df = df.rename(columns={'另一表头': '名称'}) def process_name(name_str): # 将字符串按空格分割为片段 parts = name_str.split() # 转换为小写用于匹配重复项(忽略大小写) lower_parts = [p.lower() for p in parts] # 找出重复出现的字符串 duplicate = None for part in parts: if lower_parts.count(part.lower()) >= 2: duplicate = part break # 修正名称:处理两种情况——合并的名字拆分、末尾重复项移除 corrected_name = name_str if duplicate: # 情况1:末尾是重复项,直接移除 if parts[-1].lower() == duplicate.lower(): corrected_name = ' '.join(parts[:-1]) # 情况2:前面的合并字符串包含重复项的大写形式,拆分合并项 elif duplicate.capitalize() in parts[0]: corrected_name = parts[0].replace(duplicate.capitalize(), f' {duplicate}').lstrip() return duplicate, corrected_name # 应用函数生成新列 df[['poped_out_string', 'corrected_name']] = df['名称'].apply(lambda x: pd.Series(process_name(x))) # 查看结果 print(df)
输出结果
| id | 名称 | poped_out_string | corrected_name |
|---|---|---|---|
| 1 | JohnWalter walter | walter | John walter |
| 2 | AdamSmith Smith | Smith | Adam Smith |
| 3 | Steve Rogers rogers | rogers | Steve Rogers |
内容的提问来源于stack exchange,提问作者Jai Sai
相关产品推荐
相关产品推荐

