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

如何将含不同数据类型的Pandas DataFrame左对齐写入TXT文件

保留原始字符串格式左对齐写入TXT文件

需求说明

现有如下Pandas DataFrame:

import pandas as pd

data = {'Column1': ['1e10', '123.1105', '0.5e-2', '0'],
        'Column2': ['String1', 'String3', 101, 'String4']}
df = pd.DataFrame(data)

需要将其写入TXT文件,要求:

  • 仅用空格分隔列
  • 所有列左对齐
  • 第一列保留原始字符串格式(不自动转换为科学计数法或四舍五入)
    目标输出格式如下:
------- Data --------
Column1  Column2
1e10     String1
123.1105 String3
0.5e-2   101
0        String4

现有问题

使用tabulate工具的代码会自动转换第一列的数值格式,且默认右对齐,不符合需求:

from tabulate import tabulate

# Format dataframe into table
table_content = tabulate(df.values.tolist(),tablefmt="plain")

# Write the txt-file
with open("example.txt", "w") as file:
    file.write("------- Data --------\n")
    file.write(table_content)

输出结果:

------- Data --------
Column1  Column2
  1e+10  String1
123.111  String3
  0.005  101
  0      String4

高效解决方案

方法一:使用Pandas原生to_string方法

Pandas的to_string方法可以直接控制列对齐方式、列间距,并且保留原始字符串格式(需确保目标列为字符串类型):

import pandas as pd

data = {'Column1': ['1e10', '123.1105', '0.5e-2', '0'],
        'Column2': ['String1', 'String3', 101, 'String4']}
df = pd.DataFrame(data)

# 显式转换Column1为字符串类型,避免自动数值转换
df['Column1'] = df['Column1'].astype(str)

# 生成格式化表格:左对齐、设置列间距、隐藏行索引
table_content = df.to_string(justify='left', col_space=8, index=False)

# 写入文件
with open("example.txt", "w") as file:
    file.write("------- Data --------\n")
    file.write(table_content)
  • justify='left':强制所有列左对齐
  • col_space=8:控制列之间的空格数量(可按需调整)
  • index=False:不输出行索引,符合目标格式

方法二:手动计算列宽格式化(更灵活)

如果需要精确控制每列宽度,可手动计算列的最大长度,逐行拼接格式化字符串:

import pandas as pd

data = {'Column1': ['1e10', '123.1105', '0.5e-2', '0'],
        'Column2': ['String1', 'String3', 101, 'String4']}
df = pd.DataFrame(data)

# 转换所有列为字符串,统一处理格式
df_str = df.astype(str)

# 计算每列的最大宽度(包含标题长度)
col_widths = [max(len(col), df_str[col].str.len().max()) for col in df_str.columns]

# 生成左对齐的标题行
header = '  '.join([f"{col:<{col_widths[i]}}" for i, col in enumerate(df_str.columns)])

# 生成左对齐的数据行
rows = []
for _, row in df_str.iterrows():
    row_str = '  '.join([f"{val:<{col_widths[i]}}" for i, val in enumerate(row)])
    rows.append(row_str)

# 拼接所有内容
table_content = '\n'.join([header] + rows)

# 写入文件
with open("example.txt", "w") as file:
    file.write("------- Data --------\n")
    file.write(table_content)

这种方式可以精准控制每列的宽度,确保对齐效果完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:42:54