如何在打印表格中嵌入文本汇总?基于Pandas DataFrame实现
问题:如何按指定格式垂直打印两个结构不同的Pandas DataFrame?
我有两个结构不同的Pandas DataFrame:
import pandas as pd data1 = { 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'Height': [165, 182, 177] } df1 = pd.DataFrame(data1) data2 = { 'Summary': ["Alice is the youngest", "Bob is the tallest"] } df2 = pd.DataFrame(data2)
我希望将它们按以下格式垂直打印,保留各自的列结构,而非合并所有列到顶部:
+---+---------+-----+----------+ | | Name | Age | Height | +---+---------+-----+----------+ | 0 | Alice | 25 | 165 | | 1 | Bob | 30 | 182 | | 2 | Charlie | 35 | 177 | +---+---------+-----+----------+ | | Summary | +---+--------------------------+ | 0 | "Alice is the youngest" | | 1 | "Bob is the tallest" | +---+--------------------------+
目前尝试的方法均会合并列,无法实现上述效果。
解决方案
由于两个DataFrame列结构完全不同,pd.concat这类拼接方法会强制合并列(缺失值填充NaN),不符合需求。要实现目标打印效果,核心思路是分别打印两个DataFrame,以下是几种可行方法:
方法1:直接分别打印(最简方案)
无需额外依赖,直接打印两个DataFrame,可添加分隔线优化视觉效果:
import pandas as pd # 定义DataFrame(省略重复代码) df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2) # 打印第一个DataFrame print(df1.to_string(index=True)) # 打印分隔线 print("-" * 50) # 打印第二个DataFrame print(df2.to_string(index=True))
方法2:用tabulate库生成网格样式表格
如果需要和示例完全一致的网格风格,可使用tabulate库:
- 先安装库:
pip install tabulate
- 编写代码:
from tabulate import tabulate import pandas as pd df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2) # 格式化打印第一个DataFrame print(tabulate(df1, headers='keys', tablefmt='grid', showindex=True)) # 可选:添加分隔线 print("+" + "-"*30 + "+") # 格式化打印第二个DataFrame print(tabulate(df2, headers='keys', tablefmt='grid', showindex=True))
该代码会输出和示例几乎一致的带边框表格。
方法3:手动定制输出(无依赖)
如果不想用第三方库,可手动处理字符串输出,自动匹配分隔线长度:
import pandas as pd df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2) # 获取两个DataFrame的字符串格式 df1_str = df1.to_string(index=True) df2_str = df2.to_string(index=True) # 计算最长行长度,生成匹配的分隔线 max_line_len = max(len(line) for line in df1_str.split("\n")) separator = "-" * max_line_len # 拼接打印 print(df1_str) print(f"\n{separator}\n") print(df2_str)
内容的提问来源于stack exchange,提问作者vicefreak04
相关产品推荐
相关产品推荐

