
使用 pandas.read_csv() 读取含连续尾部分隔符(如 ;;;;)的 CSV 时,默认会忽略末尾空字段;需通过 skip_blank_lines=False 和关键参数 engine='python' 配合 keep_default_na=False 等设置,强制解析全部列并填充为 NaN。
使用 `pandas.read_csv()` 读取含连续尾部分隔符(如 `;;;;`)的 csv 时,默认会忽略末尾空字段;需通过 `skip_blank_lines=false` 和关键参数 `engine='python'` 配合 `keep_default_na=false` 等设置,强制解析全部列并填充为 `nan`。
当 CSV 行末存在多个连续分隔符(例如 a;b;c;;;),Pandas 默认 C 引擎会截断尾部空字段,导致列数少于实际定义——这正是你遇到的问题:原始数据含 37 个字段(由 36 个分号分隔),但 read_csv 仅返回 13 列。
根本原因在于 Pandas 的默认解析引擎(C engine)对尾部空字段的优化行为。解决方法是显式启用 Python 引擎并禁用空白行跳过与默认 NA 识别,确保逐字符严格按分隔符切分:
import pandas as pd
# ✅ 正确加载:保留所有尾部空列
df = pd.read_csv(
config.get("OS", "output_file"),
header=None,
sep=config.get("OS", "delimiter"), # 如 ';'
engine='python', # 关键!启用 Python 解析器,支持完整字段计数
skip_blank_lines=False, # 防止跳过全空字段行(虽此处非空行,但增强鲁棒性)
keep_default_na=False, # 避免将空字符串误判为 NaN 干扰列结构
na_values='', # 显式指定空字符串为 NA 值(可选,更精准)
dtype=str # 可选:先统一为字符串,后续再类型转换,避免自动推断失败
)
# 若需将空字符串转为 True NaN(而非空字符串),再执行:
df = df.replace('', pd.NA)
⚠️ 注意事项:
Knowledge Graph - Csv Graph Loader Generator下载从 CSV 数据集生成图数据库加载器和三元组映射。将表格 CSV 数据转换为图数据库可直接使用的节点、边和三元组。
engine='python'是核心:C 引擎不支持尾部空字段保留,Python 引擎则严格按分隔符分割,即使末尾连续分隔符也生成对应空列;skip_blank_lines=False并非针对本例(因行非空白),但若文件混有空行,此参数可防止意外跳过影响行对齐;- 避免
df.fillna(value='')过早覆盖原始NaN—— 应先确保列结构完整,再按需填充;- 若原始数据含
None字符串(非 PythonNone),建议添加na_values=['None']使其被识别为缺失值。
验证列数是否符合预期:
print(f"DataFrame shape: {df.shape}") # 应输出 (行数, 37)
print(f"Column count: {len(df.columns)}") # 应为 37
print(df.iloc[0].isna().sum()) # 查看首行中 NaN 数量(应包含所有尾部空列)
最终,你将获得一个结构完整的 DataFrame,每列对应原始 CSV 中的一个字段位置,尾部连续分隔符被准确映射为独立的 NaN 列,为后续清洗与分析奠定可靠基础。











