You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas读取CSV时空值行、分隔符导致数据解析异常问题

问题修复方案

根因说明

  • 源CSV里仅含逗号、无实际内容的行本质是全空记录,pandas默认读取时会把这类行加载为全NaN值的无效行,不需要手动编辑源文件
  • 手动删除单个单元格的操作破坏了CSV的分隔符对齐规则:CSV按行以逗号分割匹配字段位置,单独删除某行开头的逗号会让该行所有字段向前偏移一列,直接触发解析错位
  • 原代码里用的DataFrame.append()已经在Pandas 1.4.0之后被废弃,循环追加不仅效率低,还容易出现索引重复的问题

可直接运行的修复代码

import pandas as pd
import os

input_loc = "./SalesAnalysis/Sales_Data/"
output_loc = "./SalesAnalysis/korbi_output/"
# 自动创建输出目录,避免路径不存在报错
os.makedirs(output_loc, exist_ok=True)
# 提前过滤出csv文件,减少循环判断
csv_files = [f for f in os.listdir(input_loc) if f.endswith(".csv")]

df_list = []
for file in csv_files:
    file_path = os.path.join(input_loc, file)
    # 读取阶段做好容错配置
    df = pd.read_csv(
        file_path,
        skip_blank_lines=True, # 读取时自动跳过全空行
        na_values=["", " "], # 把空字符串、纯空格统一识别为空值NaN
        on_bad_lines="skip" # 自动跳过格式严重损坏的异常行,避免解析报错
    )
    df_list.append(df)

# 一次性合并所有表格,替代循环append,性能更好且无版本兼容问题
all_months_data = pd.concat(df_list, ignore_index=True)

# 分层清理空值,避免误删有效数据
# 第一步:删除所有字段全为空的行
all_months_data.dropna(how="all", inplace=True)
# 第二步:删除核心必填字段为空的坏行,列名和你数据集的实际字段保持一致即可
required_columns = ["Order ID", "Product", "Quantity Ordered", "Price Each", "Order Date", "Purchase Address"]
all_months_data.dropna(subset=required_columns, how="any", inplace=True)

# 重置索引
all_months_data.reset_index(drop=True, inplace=True)

# 导出时关闭索引输出,避免生成多余的无意义列
all_months_data.to_csv(os.path.join(output_loc, "all_months_data.csv"), index=False)
# 打印前5行验证结果
print(all_months_data.head())

关键注意事项

  • 禁止手动编辑源CSV文件做数据清理:CSV是纯文本结构化格式,手动修改单个单元格很容易破坏分隔符对齐规则,所有清理逻辑都要放在代码中做可复现的批量处理
  • 空行清理分两层执行:先删全空行,再删核心字段缺失的坏行,不会误删存在部分空值但有有效业务信息的记录
  • 路径拼接用os.path.join()替代字符串直接相加,兼容Windows、macOS、Linux不同系统的路径分隔符规则
  • 导出CSV必须加index=False参数,否则会把pandas默认生成的行索引作为额外列写入文件,导致后续读取出现多余列

内容的提问来源于stack exchange,提问作者fbn001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:57:33