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

如何用Pandas批量将DataFrame所有列设置为固定15字符宽度?

Pandas批量将所有列格式化为固定15字符宽度的无循环实现方法

问题背景

我有一个CSV文件,列名固定为15字符宽度,各列元素长度因数据类型不同存在差异。原始数据如下:

Name           ,Date           ,Time           ,TST Num        ,Dept/Dest      ,Tst Level      ,AAS            
AAAAAA         ,18/12/2007     ,07:57:40,AAA101         ,AAAABBBB       ,220,320
BBBBBB         ,18/12/2007     ,12:34:06,AAA112         ,XXXXYYYY       ,210,320

希望处理后得到每个元素都占15字符宽度的结果:

Name           ,Date           ,Time           ,TST Num        ,Dept/Dest      ,Tst Level      ,AAS            
AAAAAA         ,18/12/2007     ,07:57:40       ,AAA101         ,AAAABBBB       ,220            ,320
BBBBBB         ,18/12/2007     ,12:34:06       ,AAA112         ,XXXXYYYY       ,210            ,320

目前单独处理某一列可以生效:

df = df.astype(str)
df['Time           '] = df['Time           '].apply('{:15s}'.format)

但批量处理的写法无法生效:

all_columns = list(df)
df[all_columns] = df[all_columns].apply('{:15s}'.format)

想知道有没有无需循环的批量实现方法。


解决方案

使用applymap替代apply即可实现无循环批量格式化,applymap会遍历DataFrame中的每个元素并应用格式化规则:

# 先将所有元素转为字符串类型,确保格式化统一
df = df.astype(str)
# 批量对每个元素应用15字符宽度的格式化
df = df.applymap('{:15s}'.format)

也可以合并为一行代码:

df = df.astype(str).applymap('{:15s}'.format)

原因说明

你之前的批量写法失效是因为apply是对整列(Series)执行操作,而'{:15s}'.format需要单个字符串作为参数,直接作用于Series会不符合预期;而applymap是针对DataFrame中的每个单独元素应用函数,正好匹配格式化单个字符串的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:05:24