如何在将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
相关产品推荐
相关产品推荐

