Pandas Dataframe写入CSV时表头重复问题求助
解决循环写入CSV时重复表头的问题
我太懂这种循环写CSV重复表头的糟心感了——爬多页招聘数据,结果CSV里每一页开头都插个表头,后期处理起来还要手动删,简直浪费时间。给你分享两个实用的解决思路,亲测有效:
方法一:先收集所有数据再一次性写入
这种方法适合数据量不算特别大的场景,思路是先把每页爬取到的DataFrame都存到一个列表里,等所有页面爬完后,再合并成一个大的DataFrame,最后一次性写入CSV,这样表头只会出现一次。
代码示例:
import pandas as pd # 初始化空列表,用来存储每页的DataFrame df_collection = [] total_pages = 5 # 替换成你实际要爬的总页数 # 循环遍历每一页 for page_num in range(1, total_pages + 1): # 这里替换成你的爬虫逻辑,获取当前页的数据并生成DataFrame current_page_df = your_scraping_logic(page_num) # 将当前页的DataFrame加入列表 df_collection.append(current_page_df) # 合并所有DataFrame,ignore_index=True重置索引 final_dataframe = pd.concat(df_collection, ignore_index=True) # 写入CSV,index=False不保存索引列 final_dataframe.to_csv('recruitment_data.csv', index=False)
注意:如果爬取的数据量极大(比如上万条),这种方法可能会占用较多内存,这时可以试试下面的方法。
方法二:循环时动态控制表头写入
这种方法是在每次写入CSV时,只让第一页写入表头,后续页面以追加模式写入且不写表头。核心是利用mode参数控制写入模式,header参数控制是否写入表头。
代码示例:
import pandas as pd total_pages = 5 # 替换成实际总页数 for page_num in range(1, total_pages + 1): current_page_df = your_scraping_logic(page_num) # 判断是否是第一页:是则覆盖写入并写表头,否则追加写入且不写表头 if page_num == 1: current_page_df.to_csv('recruitment_data.csv', index=False, mode='w') else: current_page_df.to_csv('recruitment_data.csv', index=False, mode='a', header=False)
关键提醒:一定要确保每一页爬取生成的DataFrame列名完全一致,否则追加时会出现列错位或者缺失的问题。如果某一页的列名和其他页不一样,要先做列名对齐处理再写入。
内容的提问来源于stack exchange,提问作者pyrish
相关产品推荐
相关产品推荐

