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

如何在将Pandas DataFrame写入文件时保留额外空白符?

保留DataFrame中Tab/空白符的写入方案

我有一个包含额外空白符(实际是Tab)的DataFrame,打印时能看到这些空白符,但用Pandas的to_csv()写入文件时会被去除。用file.write(str(df))写入字符串形式能保留空白符,但列中字符串过长时没法维持表格格式。
示例DataFrame如下:

a   |   b   |     c        | d
------------------------------
10  |   1   |     100      | d
20  |   2   |     10       | d

每行的空白符数量因列值而异,比如c列第二行比第一行多一个空白符(实际是Tab调整的对齐)。背景是通过pd.read_csv()读取文件时空白符会被保留,处理后要写入另一个文件,但to_csv()做不到,也可以用np.savetxt()或其他方法。

核心问题分析

Pandas的to_csv()默认会自动规整分隔符和空白,因此会清除原数据里的Tab/空格;直接转字符串写入又会因列宽不一致导致格式混乱。解决的关键是精准控制每一列的输出格式。

针对Tab的处理方案

由于实际是Tab而非空格,以下两种方法可实现需求:

方法1:手动构建每行字符串(完全复刻原格式)

遍历DataFrame的每一行,按原有的Tab+|分隔格式拼接字符串,写入文件时能1:1保留对齐格式:

# 构建带Tab的列名行
header = "\t|\t".join(df.columns) + "\n"
# 生成分隔线(按需保留)
separator = "-" * len(header.strip()) + "\n"

# 写入文件
with open("output.txt", "w") as f:
    f.write(header)
    f.write(separator)
    # 逐行拼接并写入
    for _, row in df.iterrows():
        line = "\t|\t".join(str(val) for val in row.values) + "\n"
        f.write(line)

这种方法完全自定义输出逻辑,适合需要严格对齐原格式的场景。

方法2:用np.savetxt()指定Tab分隔符

如果不需要示例中的|符号,仅需Tab分隔列,可直接用np.savetxt():

import numpy as np

# 先写入列名
with open("output.txt", "w") as f:
    f.write("\t".join(df.columns) + "\n")
# 写入数据,指定分隔符为Tab,格式为字符串
np.savetxt("output.txt", df.values, fmt="%s", delimiter="\t", newline="\n", append=True)

此方法能保留列值内部的Tab,同时保证列间分隔为Tab,不会被Pandas自动处理。

额外注意

读取文件时需确保pd.read_csv()不自动清除Tab,需设置参数:

df = pd.read_csv("input.txt", sep=None, engine="python")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:21:34