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

如何使用Pandas快速加载存在格式错误的固定列宽空格分隔CSV文件

方案1:直接使用Pandas固定宽度文件读取接口(最优方案)

你提到文件所有列的起止位置为固定值,完全可以直接用Pandas内置的pd.read_fwf()接口加载,该接口专门用于读取固定列宽的文本文件,直接按位置切分列,完全不受分隔符缺失问题影响,底层为C实现,处理效率远高于自行逐行处理。

使用步骤:

  • 先统计所有列的起止索引(遵循左闭右开规则),整理为colspecs参数,示例如下:
import pandas as pd

# 按实际列的起止位置调整每个元组的数值
colspecs = [
    (0, 23),   # 第一个时间戳列
    (24, 47),  # 第二个时间戳列
    (48, 58),  # 数值列1
    (59, 69),  # 数值列2
    (70, 80),  # 数值列3
    (81, 93),  # 数值列4
    (94, 104), # 数值列5
    (105, 117),# 数值列6
    (118, 129),# 数值列7
    (130, 140),# 数值列8
    (141, 151) # 数值列9
]

df = pd.read_fwf(
    "你的文件路径.txt",
    colspecs=colspecs,
    decimal=","  # 适配文件中逗号作为小数点的格式
)
  • 不需要额外做格式修正,加载后直接获得正常的DataFrame。

方案2:全局正则预处理后加载

如果你不想统计列宽,也可以通过批量正则替换补全缺失的空格,再用pd.read_csv()加载,效率同样远高于逐行处理:

import re
import pandas as pd

# 一次性读取全量文件内容
with open("你的文件路径.txt", "r", encoding="utf-8") as f:
    content = f.read()

# 给所有非行首、非空格前的负号前补空格
processed_content = re.sub(r"(?<!^|\s)(?=-)", " ", content)

# 直接读取处理后的内容
df = pd.read_csv(
    pd.io.common.StringIO(processed_content),
    sep="\s+",
    decimal=",",
    header=None
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:30:01