如何通过Pandas to_string实现指定列按位置左对齐输出?
问题描述
现有如下简单DataFrame:
data = [[2025, 198237, 77, 18175], [202, 292827, 77, 292827]]
已通过以下代码提取第1列和第4列,并去除索引与表头输出:
import pandas as pd df = pd.DataFrame(data).iloc[:, [0, 3]] print(df.to_string(index=False, header=False))
当前输出结果:
2025 18175 202 292827
需要将第一列左对齐到第3列位置,第二列左对齐到第10列位置,期望输出如下:
2025 18175 202 292827
询问如何实现该需求,是否可使用ljust方法?
解决方案
可以用ljust方法实现,以下是几种具体的实现方式:
方法1:逐行处理结合ljust
遍历DataFrame的每一行,通过字符串拼接和ljust固定列宽,确保对齐:
import pandas as pd data = [[2025, 198237, 77, 18175], [202, 292827, 77, 292827]] df = pd.DataFrame(data).iloc[:, [0, 3]] for row in df.itertuples(index=False): # 第一列先补3个空格,再用ljust固定总长度为7,保证第二列起始位置统一 col1 = (" " + str(row[0])).ljust(7) # 第二列按期望格式补空格后输出 col2 = f" {row[1]} " print(col1 + col2)
执行后输出:
2025 18175 202 292827
方法2:格式化字符串(简洁实现)
如果觉得ljust不够直观,也可以直接用Python的格式化语法指定对齐位置,效果一致:
for row in df.itertuples(index=False): # 第一列前补3个空格,左对齐占4位;第二列前补3个空格 print(f" {row[0]:<4} {row[1]} ")
这里:<4表示将第一列的数字左对齐,占4个字符宽度,配合前面的3个空格,刚好让第一列整体对齐到目标位置,第二列也能同步对齐。
方法3:纯ljust控制列宽
如果要完全依赖ljust来控制每列的宽度,也可以这样写:
for row in df.itertuples(index=False): col1 = (" " + str(row[0])).ljust(7) col2 = (" " + str(row[1])).ljust(9) print(col1 + col2)
核心是通过ljust固定每列的字符串长度,确保多行输出时列的起始位置完全一致。
内容的提问来源于stack exchange,提问作者yodish
相关产品推荐
相关产品推荐

