Pandas写入CSV如何追加数据并避免重复表头?
解决Pandas追加CSV数据不覆盖且无重复表头的问题
核心问题分析
你当前的代码每次都会创建带表头的空finalDf,再追加单条数据后写入文件:
- 直接写入时会覆盖原有文件,导致旧数据丢失;
- 使用
mode='a+'追加时,每次写入都会带上表头,最终造成表头重复。
下面提供两种实用解决方案:
方法一:判断文件存在性,按需写入表头
通过判断目标CSV文件是否存在,决定是否写入表头,仅在文件首次创建时写入表头,后续追加只写数据。
import pandas as pd import os # 构造要追加的新数据 new_data = pd.DataFrame({ "sourcez": ["str(source_Path)_New"], "tergetz": ["str(target_path)_New"], "TMP": ["total_matching_points_New"] }) csv_file = "Testing.csv" if os.path.exists(csv_file): # 文件已存在,追加数据,不写入表头 new_data.to_csv(csv_file, index=False, mode="a", header=False) else: # 文件不存在,首次写入,包含表头 new_data.to_csv(csv_file, index=False)
方法二:合并新旧数据后写入(适合小数据量场景)
如果数据量不大,可以直接读取原有CSV数据,与新数据合并后整体写入,天然避免重复表头和数据覆盖。
import pandas as pd csv_file = "Testing.csv" # 构造新数据 new_data = pd.DataFrame({ "sourcez": ["str(source_Path)_New"], "tergetz": ["str(target_path)_New"], "TMP": ["total_matching_points_New"] }) try: # 读取已有数据 existing_data = pd.read_csv(csv_file) # 合并新旧数据,重置索引 combined_data = pd.concat([existing_data, new_data], ignore_index=True) except FileNotFoundError: # 文件不存在,直接使用新数据 combined_data = new_data # 写入合并后的数据 combined_data.to_csv(csv_file, index=False)
两种方法对比
- 方法一:无需读取原有文件,性能更优,适合大数据量的追加场景;
- 方法二:逻辑更直观,无需额外判断文件状态,适合数据量较小的场景。
内容的提问来源于stack exchange,提问作者Tushaar Srivastava
相关产品推荐
相关产品推荐

