如何清洗CSV字符串列,仅保留其中的人名内容?
嘿,我明白你需要从那份2018年总统会议CSV的oque列里,把混杂在其他内容里的人名单独提取出来,只保留名字、中间名和姓氏对吧?结合你的需求,我给你准备了两种常用场景的解决方案,你可以按需选择:
方案一:用Python Pandas处理(适合批量/自动化场景)
处理CSV文件最灵活的方式还是用Python的pandas库,配合正则表达式精准匹配人名。考虑到原数据集是葡萄牙语的,正则里特意兼容了带重音的姓名:
- 先导入所需库并读取CSV文件:
import pandas as pd import re # 替换成你的CSV文件路径 df = pd.read_csv("2018总统会议记录.csv")
- 定义一个提取并可选截断人名的函数:
def extract_and_truncate_names(text): # 匹配葡萄牙语姓名:首字母大写,支持中间名,多个姓名用逗号+空格分隔 name_pattern = r'([A-Z][a-zA-ZÀ-ÿ]+(?: [A-Z][a-zA-ZÀ-ÿ]+)*)' # 提取所有符合格式的姓名 matched_names = re.findall(name_pattern, text) # 对过长的姓名进行截断(比如你例子里的Henrique Me...),这里设置截断长度为10,可自行调整 processed_names = [name if len(name) <= 10 else f"{name[:10]}..." for name in matched_names] # 用逗号连接所有姓名 return ', '.join(processed_names) # 将函数应用到oque列,生成新的提取后列 df['提取的人名'] = df['oque'].apply(extract_and_truncate_names)
- 保存处理后的文件:
# 保存为新的CSV,不保留索引列 df.to_csv("处理后的总统会议记录.csv", index=False)
小提示:如果你的姓名有特殊格式(比如带头衔缩写),可以调整正则表达式的规则,比如去掉
Dr.这类前缀,只保留纯姓名部分。
方案二:用Excel公式处理(适合可视化手动操作场景)
如果你更习惯用Excel,这里有个适合Excel 365或新版Excel的公式,能直接拆分并提取人名,还支持截断:
假设你的oque列在A列,在B2单元格输入以下公式,然后下拉填充即可:
=TEXTJOIN(", ", TRUE, IF(ISNUMBER(SEARCH(" ", TRIM(MID(SUBSTITUTE(A2, ",", REPT(" ", 100)), (ROW(INDIRECT("1:"&LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*100+1, 100)))), IF(LEN(TRIM(MID(SUBSTITUTE(A2, ",", REPT(" ", 100)), (ROW(INDIRECT("1:"&LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*100+1, 100)))>10, LEFT(TRIM(MID(SUBSTITUTE(A2, ",", REPT(" ", 100)), (ROW(INDIRECT("1:"&LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*100+1, 100)),10)&"...", TRIM(MID(SUBSTITUTE(A2, ",", REPT(" ", 100)), (ROW(INDIRECT("1:"&LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1))-1)*100+1, 100))), ""))
注:如果是旧版Excel,输入公式后需要按
Ctrl+Shift+Enter触发数组公式生效。
内容的提问来源于stack exchange,提问作者agccaesar
相关产品推荐
相关产品推荐

