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

