You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从fakeprofile.csv中提取并统计最常见的名字?

解决提取CSV行首名字并统计高频的问题

你的问题核心在于原正则会匹配所有符合大写开头的单词,而没有限定只提取每行开头的名字部分。结合你的CSV结构(每行开头是名字,紧接着是固定格式的SSN),我们可以针对性地处理每行数据,精准提取名字后再统计频率。

步骤1:精准提取每行的名字

你的CSV每行格式是:[名字] [SSN] [城市] [地址] [邮箱],其中SSN是XXX-XX-XXXX的固定格式。我们可以利用这一点,用正则匹配每行中SSN之前的内容作为名字;或者逐行读取后,通过SSN的特征分割字符串。

步骤2:统计名字出现频率

使用Python的collections.Counter可以高效统计高频元素,比手动统计更简洁。

修改后的完整代码

import re
from collections import Counter

# 逐行读取文件,提取每行的名字
names_list = []
with open('fakeprofile.csv', 'r') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        # 用正则匹配SSN格式,提取SSN之前的内容作为名字
        # 正则解释:^匹配行首,.*?非贪婪匹配到SSN格式之前的内容
        match = re.match(r'^(.*?) \d{3}-\d{2}-\d{4}', line)
        if match:
            full_name = match.group(1).strip()
            names_list.append(full_name)

# 统计名字频率
name_counter = Counter(names_list)

# 获取最常见的前N个名字(这里取前5个示例)
most_common_names = name_counter.most_common(5)

print("最常见的名字及出现次数:")
for name, count in most_common_names:
    print(f"{name}: {count}次")

代码解释

  1. 逐行读取:避免一次性读取大文件占用过多内存,同时方便处理每行数据。
  2. 正则匹配名字:r'^(.*?) \d{3}-\d{2}-\d{4}'中:
    • ^锚定行首,确保只匹配每行开头的内容
    • .*?非贪婪匹配,直到遇到第一个SSN的前缀空格(因为SSN是固定格式,前面的就是名字)
    • \d{3}-\d{2}-\d{4}精确匹配SSN的格式,确保分割点准确
  3. Counter统计:Counter会自动统计每个名字的出现次数,most_common()方法可以直接返回高频结果。

额外优化:如果需要单独统计名(First Name)或姓(Last Name)

如果你想统计最常见的名(比如Alicia、Nicole),可以在提取全名后再分割:

# 修改提取后的处理逻辑
first_names = []
for full_name in names_list:
    # 分割全名,取第一个词作为名
    first_name = full_name.split()[0]
    first_names.append(first_name)

first_name_counter = Counter(first_names)
print("最常见的名及出现次数:")
for name, count in first_name_counter.most_common(5):
    print(f"{name}: {count}次")

这样就能精准提取你需要的名字数据,避免无关的地名、地址词汇干扰啦。

内容的提问来源于stack exchange,提问作者Pkd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:37:44