使用Pandas将多个文本文件数据合并为单个DataFrame
解决方法:按行合并带年份列的姓名数据
我来帮你搞定这个问题!你的代码现在把每个文件的数据放到单独列里,核心问题出在合并方向错误,另外读取文件和添加年份列的方式也需要调整。下面一步步给你讲清楚:
问题分析
- 读取文件方式不对:你的文本文件是逗号分隔的,但
pd.read_table默认用制表符分隔,会把整行内容读成一列,后续拼接字符串的操作也完全偏离了“新增年份列”的需求。 - 添加年份列的逻辑错误:
pd.read_table(file)+","+year是把整个DataFrame的每个元素都和年份字符串拼接,而不是新增一列存储年份。 - 合并方向错误:
pd.concat(..., axis=1)是按列合并数据,你需要的是按行追加,应该使用axis=0(这也是concat的默认参数)。
修正后的完整代码
import pandas as pd def main(): FILE_FOLDER = "你的文件夹路径" # 替换成你实际的文件夹路径 files = file_paths(FILE_FOLDER) # 假设这个函数能正确返回所有yob####.txt的路径 df_list = [] for file in files: # 从文件名提取年份:比如yob1880.txt,截取[3:7]得到'1880' year = file.split("\\")[-1][3:7] # 用read_csv读取逗号分隔的文件,指定列名让数据结构更清晰 df = pd.read_csv(file, names=['Name', 'Gender', 'Count']) # 新增年份列,所有行自动填充当前文件对应的年份 df['Year'] = year # 将处理好的DataFrame加入列表 df_list.append(df) # 按行合并所有DataFrame,ignore_index重置索引避免重复 big_df = pd.concat(df_list, ignore_index=True) # 保存到CSV,开启header=True保留列名,方便后续查看和处理 big_df.to_csv("Combined.csv", header=True, index=False) if __name__ == "__main__": main()
关键修改说明
- 读取文件:用
pd.read_csv替代pd.read_table,并通过names参数指定列名,确保每一列对应正确的数据(姓名、性别、数量)。 - 添加年份列:直接用
df['Year'] = year新增一列,简单高效,当前文件的所有行都会自动填充对应的年份。 - 合并数据:
pd.concat默认按行(axis=0)合并,这样每个文件的数据会依次追加到前一个文件的行后面,完全符合你“按年份顺序追加数据”的需求。 - 保存结果:开启
header=True让输出的CSV包含列名,后续查看或分析数据时会更直观。
这样处理后,你的Combined.csv就会是所有年份的数据按行排列,每行都包含姓名、性别、数量和对应的年份啦!
内容的提问来源于stack exchange,提问作者BruceWayne
相关产品推荐
相关产品推荐

