CSV文件正确清洗方法:提取日期与比率字段并处理冗余引号问题
CSV指定字段提取清洗方案
原代码问题
你现有代码使用nrows=0参数仅读取了CSV的表头行,未加载任何实际数据,因此无法得到有效处理结果。
方案1:Pandas实现(适配大多数场景,代码简洁)
通过指定读取参数直接过滤不需要的列,降低大文件内存占用,核心代码如下:
import pandas as pd # 读取文件,仅加载需要的第1列(索引0)和第6列(索引5) df = pd.read_csv( "Dataset.csv", sep=";", # 指定分隔符为分号 quotechar='"', # 自动处理包裹字段的双引号 usecols=[0, 5], # 仅读取需要的两列,大幅降低内存消耗 header=None, # 无表头行,如果你实际文件有表头可删除这行并调整usecols索引 dtype=str # 全部按字符串读取,避免自动格式转换出错 ) # 清理字段中残留的多余引号 df[0] = df[0].str.replace('"', "") df[5] = df[5].str.replace('"', "") # 按你需要的格式输出到新文件 df.to_csv( "processed_result.csv", header=False, index=True, # 保留行号索引和你示例的输出格式匹配 encoding="utf-8" )
方案2:纯Python逐行读取(适配TB级超大文件,内存占用极低)
不需要加载全量文件到内存,逐行处理即可,核心代码如下:
# 输出结果文件路径 output_path = "processed_result.csv" with open("Dataset.csv", "r", encoding="utf-8") as f_in, open(output_path, "w", encoding="utf-8") as f_out: # 如果你的CSV第一行是表头,取消注释下面这行跳过表头 # next(f_in) for line_num, line in enumerate(f_in, start=1): line = line.strip() if not line: continue # 按分号拆分字段 fields = line.split(";") # 提取日期和比率,清理多余双引号 date = fields[0].replace('"', "").strip() rate = fields[5].replace('"', "").strip() # 按要求格式写入行 f_out.write(f"{line_num}.{date}, {rate}\n")
内容的提问来源于stack exchange,提问作者Volnick
相关产品推荐
相关产品推荐

