使用循环修改DataFrame:批量处理年份命名的姓名统计TXT文件
批量合并yob年份TXT文件为带年份列的CSV
不用提前修改原TXT文件,直接用Python+pandas就能搞定,给你个靠谱的实现方案:
核心思路
遍历所有符合命名规则的TXT文件,提取文件名里的年份,读取文件内容后给每行加上年份列,最后把所有数据合并成一个CSV。
完整代码
import pandas as pd import re import os # 替换成你的TXT文件所在文件夹路径 folder_path = "./your_folder_path" all_dfs = [] # 遍历文件夹里的所有文件 for file_name in os.listdir(folder_path): # 只处理yob开头、txt结尾的文件 if file_name.startswith("yob") and file_name.endswith(".txt"): # 用正则提取文件名里的4位年份 year_match = re.search(r"\d{4}", file_name) if year_match: year = year_match.group() # 读取TXT文件,指定列名(原文件没有表头) df = pd.read_csv(os.path.join(folder_path, file_name), names=["Name", "Sex", "Frequency"]) # 添加Year列 df["Year"] = year # 把当前文件的数据存入列表 all_dfs.append(df) # 合并所有数据框 final_df = pd.concat(all_dfs, ignore_index=True) # 保存为最终CSV(index=False是不保存行号) final_df.to_csv("combined_names.csv", index=False)
常见问题排查
如果之前输出不符合预期,大概率是这几个原因:
- 正则提取年份出错:比如没匹配到4位数字,或者文件名格式有差异,上面的
\d{4}能精准匹配文件名里的4位年份 - 读取文件时没指定列名:原TXT没有表头,直接读会把第一行数据当成表头,导致列混乱
- 循环中没有累加数据:比如每次都覆盖了之前的DataFrame,而不是用
append存入列表后再合并
内容的提问来源于stack exchange,提问作者Brock
相关产品推荐
相关产品推荐

