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

如何在Pandas中按列格式化DataFrame并消除列间额外空格?

问题:Pandas DataFrame格式化后移除列间空格

原代码尝试用to_string格式化DataFrame,但列间会自动插入空格,无法通过参数消除:

import pandas as pd

tta = pd.DataFrame(
    {'name': ['xx', 'y y', 'z'], 'alter': ['AA', 'BB', 'CCC']})
str1 = tta.to_string(formatters={'name': '{:05s}'.format,
                                 'alter': '{:08s}'.format
                                 }, header=False, index=False, justify='right', col_space=0)

生成的结果带有列间空格:

'xx000 AA000000\ny y00 BB000000\nz0000 CCC00000'

期望得到无列间空格的拼接结果:

'xx000AA000000\ny y00BB000000\nz0000CCC00000'

优雅解决方案

方法1:单独格式化列后逐行拼接

先对每一列应用格式化规则,再直接按行拼接列值,完全控制拼接逻辑:

import pandas as pd

tta = pd.DataFrame({'name': ['xx', 'y y', 'z'], 'alter': ['AA', 'BB', 'CCC']})

# 对各列单独执行格式化
formatted_name = tta['name'].apply('{:05s}'.format)
formatted_alter = tta['alter'].apply('{:08s}'.format)

# 逐行拼接列值,无额外空格
str_result = '\n'.join(formatted_name + formatted_alter)
print(repr(str_result))

输出结果:

'xx000AA000000\ny y00BB000000\nz0000CCC00000'

方法2:用apply逐行格式化拼接

通过apply对每行直接应用格式化字符串,再用str.cat拼接所有行:

import pandas as pd

tta = pd.DataFrame({'name': ['xx', 'y y', 'z'], 'alter': ['AA', 'BB', 'CCC']})

str_result = tta.apply(
    lambda row: '{:05s}{:08s}'.format(row['name'], row['alter']),
    axis=1
).str.cat(sep='\n')

print(repr(str_result))

方案优势

这两种方法都避开了to_string硬编码列间空格的问题,直接掌控每列的格式化和拼接逻辑,代码简洁易读,也能轻松扩展到多列场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:22:43