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

使用Pandas读取CSV时特定行前导空格丢失问题排查

问题描述

使用以下代码读取CSV文件时,指定token列为字符串类型,但出现异常行为:

import pandas as pd
df = pd.read_csv(
    "sample.csv",
    dtype={'token': str},
    keep_default_na=False
)
  • 文本编辑器中第20851行的token值为' 29'(带前导空格),但执行df.loc[20851,'token']返回无空格的'29';
  • 第30118行带前导空格的' 66'可被正确读取;
  • 手动设置df.loc[20851,'token'] = ' 29'并保存CSV,重新读取后问题依旧;设置为两个前导空格' 29',重新读取后仅保留一个;
  • 已尝试encoding='utf8'、skipinitialspace=False、delim_whitespace=False等参数,均无效果。
解决方案
  • 切换至Python引擎读取
    默认的C引擎可能存在隐性的空格处理逻辑,改用Python引擎可实现更严格的字符串解析:
import pandas as pd
df = pd.read_csv(
    "sample.csv",
    dtype={'token': str},
    keep_default_na=False,
    engine='python'
)
  • 检查空格类型是否为特殊字符
    文本中显示的“空格”可能是全角空格、非-breaking空格(NBSP)等特殊字符,用repr()查看字符串的真实内容:
print(repr(df.loc[20851, 'token']))

如果输出为'\u300029'(全角空格)或'\xa029'(NBSP),说明是特殊空格,可通过字符串替换统一为普通半角空格:

df['token'] = df['token'].replace('\u3000', ' ').replace('\xa0', ' ')
  • 保存CSV时强制引号包裹所有字段
    手动修改后保存时,pandas默认逻辑可能处理带空格的字符串,导致重新读取时丢失空格。保存时指定quoting=csv.QUOTE_ALL确保所有字段被引号包裹:
import csv
df.to_csv("sample.csv", quoting=csv.QUOTE_ALL, index=False)
  • 检查目标行的CSV格式
    用文本编辑器打开CSV,确认第20851行的token字段是否与其他行格式一致(比如是否被引号包裹、分隔符是否正确)。若该行字段未被引号包裹,可能导致解析逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:32:35