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

如何使用Pandas按指定列格式导出DataFrame数据

问题原因

Pandas 自带的 to_csv 方法不支持为不同列单独指定固定宽度、固定小数位的C风格格式规则,直接调用会输出默认长度的数值/字符串,无法匹配要求的严格列宽格式。

实现方案

最稳妥的方式是按照给定的格式字符串逐行格式化数据后写入文件,可完全匹配要求的格式,不会出现列宽、小数位偏差。
修改后的完整代码如下:

import pandas as pd

# 读取原始数据
df = pd.read_csv("data.txt", names=["a", "b", "c", "d", "e", "f", "g", "h"], sep="\s+")
# 第5列(对应字段e)数值统一加20
df.loc[df["e"] > 0, "e"] = df["e"] + 20

# 定义要求的输出格式串
output_fmt = '%8d %8d %10.6f %9.6f %6.1f %6.1f %3s %1d'

# 逐行按格式写入文件
with open("data_new.txt", "w", encoding="utf-8") as out_file:
    for row in df.itertuples(index=False, name=None):
        out_file.write(output_fmt % row + '\n')

注意:如果读取数据时整数列被自动识别为浮点数,可在read_csv中指定列类型避免格式化报错:

df = pd.read_csv(
    "data.txt",
    names=["a", "b", "c", "d", "e", "f", "g", "h"],
    sep="\s+",
    dtype={"a": int, "b": int, "g": str, "h": int}
)
格式校验

运行代码后输出的文件会严格遵循定义的规则:

  • 第1、2列为占8位宽度的右对齐整数
  • 第3列为占10位宽度、保留6位小数的右对齐浮点数
  • 第4列为占9位宽度、保留6位小数的右对齐浮点数
  • 第5、6列为占6位宽度、保留1位小数的右对齐浮点数(第5列已完成加20的计算)
  • 第7列为占3位宽度的右对齐字符串
  • 第8列为占1位宽度的右对齐整数
  • 列与列之间严格使用单个空格分隔,和原始文件格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:36:21