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

从含空白的ASCII文件创建DataFrame并将空白转换为NaN的问题

pandas读取带空白占位ASCII文件并合并奇偶行方案

核心问题原因

使用sep="\s+"读取文件时,pandas会将任意长度的连续空白作为单一分隔符,直接跳过空白占位位置,导致空值丢失、列数与原始格式不匹配;使用单空格作为分隔符则会将单个空格识别为分隔符,产生大量无效空列,无法对齐字段。

读取文件保留空白为NaN的实现

优先使用pandas.read_fwf()读取固定宽度对齐的ASCII文件,该方法会按列宽度识别字段,自动保留空白占位为缺失值:

import pandas as pd
import numpy as np

# 方式1:自动识别列宽,适合对齐规则的ASCII文件
df = pd.read_fwf("你的ASCII文件路径.txt", header=None)

# 方式2:手动指定列宽/列边界,适合自动识别不准的场景
# widths参数传入每列的字符宽度
# df = pd.read_fwf("你的ASCII文件路径.txt", widths=[12, 8, 15, 20], header=None)
# 也可以用colspecs参数传入每列的起止位置(左闭右开)
# df = pd.read_fwf("你的ASCII文件路径.txt", colspecs=[(0,12), (12,20), (20,35), (35,55)], header=None)

# 统一空值格式,将剩余的空字符串转为标准NaN
df = df.replace(r"^\s*$", np.nan, regex=True)

奇偶行合并实现

读取阶段已保证所有行的列数完全一致,可直接按需求逻辑执行拆分合并:

# 拆分奇数行(第1、3、5...行)和偶数行(第2、4、6...行),重置索引保证对齐
df_first = df.iloc[::2].reset_index(drop=True)
df_second = df.iloc[1::2].reset_index(drop=True)

# 重命名第二部分的列名,避免合并后冲突
df_second.columns = [f"{col}_row2" for col in df_second.columns]

# 横向拼接得到最终结果
df_result = pd.concat([df_first, df_second], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:27:02