Python实现DataFrame数据按小数点对齐输出到TXT文件
实现DataFrame输出TXT时小数点对齐的方法
下面提供两种实用方案,帮你把带两位小数的DataFrame输出成小数点严格对齐的TXT文件:
方案一:用pandas自带方法快速实现
利用DataFrame.to_string()的formatters参数,给每列指定对齐的格式化模板,简单高效:
import pandas as pd # 示例DataFrame(替换成你的数据) df = pd.DataFrame({ '数值列1': [12.34, 5.67, 123.45, 0.12], '数值列2': [987.65, 43.21, 6.78, 1000.99] }) # 定义格式化规则:右对齐,总宽度7(整数部分最多4位+小数点+两位小数),固定两位小数 col_formatters = {col: f'{{:>7.2f}}' for col in df.columns} # 生成对齐后的字符串(去掉索引) aligned_content = df.to_string(formatters=col_formatters, index=False) # 写入TXT文件 with open('对齐后的数值.txt', 'w', encoding='utf-8') as f: f.write(aligned_content)
说明
{:>7.2f}中,>表示右对齐,7是总字符宽度,.2f强制保留两位小数。- 如果你的数据整数部分位数更多(比如有5位整数),把总宽度改成
8(5+1+2)即可,以此类推。
方案二:自动适配列宽的灵活方案
如果数据中各列的整数位数不固定,用这个方法可以自动计算每列需要的宽度,确保所有行的小数点都对齐:
import pandas as pd df = pd.DataFrame({ '数值列1': [12.34, 5.67, 123.45, 0.12], '数值列2': [987.65, 43.21, 6.78, 1000.99] }) # 计算每列数值的最大整数位数 max_int_lengths = [] for col in df.columns: # 提取每个数值的整数部分,计算其长度,取最大值 max_len = df[col].apply(lambda x: len(str(int(abs(x))))).max() max_int_lengths.append(max_len) # 生成每列的格式化字符串:总宽度=最大整数位数+1(小数点)+2(小数) col_formats = [f'{{:>{length + 3}.2f}}' for length in max_int_lengths] # 生成表头的格式化字符串,保证表头和数据列宽度一致 header_format = ' '.join([f'{{:>{length + 3}}}' for length in max_int_lengths]) formatted_header = header_format.format(*df.columns) # 格式化每一行数据 formatted_rows = [] for _, row in df.iterrows(): formatted_row = ' '.join(col_formats).format(*row.values) formatted_rows.append(formatted_row) # 组合表头和行数据 final_content = '\n'.join([formatted_header] + formatted_rows) # 写入文件 with open('自动对齐的数值.txt', 'w', encoding='utf-8') as f: f.write(final_content)
输出效果示例
生成的TXT内容会是这样的,小数点完全对齐:
数值列1 数值列2
12.34 987.65
5.67 43.21
123.45 6.78
0.12 1000.99
内容的提问来源于stack exchange,提问作者user19648611
相关产品推荐
相关产品推荐

