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

