如何为Pandas DataFrame生成无间隙边框表格(无库/样式器)
解决Pandas DataFrame打印无缝边框表格的问题
原始DataFrame定义
import pandas as pd data = {'Col1': [20, 15, 10, 5, 20, 17], 'Col2': [11, 6, 3, 16, 21, 8], 'Col3': [2, 17, 12, 7, 22, 9],'Col4': [3, 8, 13, 18, 3, 23], 'Col5': [4, 19, 8, 11, 6, 20]} df = pd.DataFrame(data)
问题描述
需要在不借助额外库或df.style的前提下,打印出带无缝单元格边框的表格,原自定义bordergen函数生成的线条存在间隙,无法形成完整框体,如何修改实现无缝边框?
解决方案
核心是统一分隔线与内容行的对齐逻辑,确保列交叉点的+与内容行的|精准对应,消除间隙。以下是修改后的完整实现:
def print_bordered_df(df): # 计算每列的最大宽度:覆盖列名和所有单元格内容的长度 col_widths = [] for col in df.columns: col_name_len = len(str(col)) max_val_len = max(len(str(val)) for val in df[col]) col_widths.append(max(col_name_len, max_val_len)) # 生成横向分隔线:+----+----+...+ 格式 def make_sep_line(): parts = ['+' + '-'*(width + 2) for width in col_widths] return ''.join(parts) + '+' # 生成内容行:| 内容 | 内容 |...| 格式 def make_row_line(values): parts = [] for val, width in zip(values, col_widths): # 左对齐显示,可改为居中:f'{val:^{width}}' parts.append(f'| {str(val):<{width}} ') return ''.join(parts) + '|' # 按顺序打印表格 sep_line = make_sep_line() print(sep_line) print(make_row_line(df.columns)) print(sep_line) for _, row in df.iterrows(): print(make_row_line(row.values)) print(sep_line) # 调用函数打印带边框的表格 print_bordered_df(df)
关键逻辑说明
- 列宽度计算:确保每列宽度足够容纳最长的内容(列名或单元格值),避免内容溢出导致边框错位。
- 分隔线生成:用
+作为列交叉点,每个列对应的横线长度为列宽度 + 2(左右各留一个空格),保证分隔线与内容行的|完全对齐。 - 内容行格式化:每个单元格内容左右留空格,用
|包裹,与分隔线的+位置一一对应,形成完整的单元格边框。
打印效果
+-------+-------+-------+-------+-------+ | Col1 | Col2 | Col3 | Col4 | Col5 | +-------+-------+-------+-------+-------+ | 20 | 11 | 2 | 3 | 4 | | 15 | 6 | 17 | 8 | 19 | | 10 | 3 | 12 | 13 | 8 | | 5 | 16 | 7 | 18 | 11 | | 20 | 21 | 22 | 3 | 6 | | 17 | 8 | 9 | 23 | 20 | +-------+-------+-------+-------+-------+
内容的提问来源于stack exchange,提问作者Brijesh Chaurasia
相关产品推荐
相关产品推荐

