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

