You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析ipynb中输出的带双行表头的pandas DataFrame纯文本表格

打印输出的pandas DataFrame纯文本解析方案

针对print()输出的pandas DataFrame纯文本解析,除pandas.read_fwf()外,更通用优雅的方案是配合StringIO和read_csv的正则分隔符实现,可适配几乎所有常规打印的DataFrame格式:

单索引表格(示例表格1)解析代码

import pandas as pd
from io import StringIO

table1_text = """                            Name  Discipline
NOC                                         
United States of America     615         615
Japan                        586         586
Australia                    470         470
People's Republic of China   401         401
Germany                      400         400
"""
df = pd.read_csv(
    StringIO(table1_text),
    sep=r'\s{2,}',  # 匹配连续2个及以上空格作为分隔符,避免列内容里的空格被误拆分
    engine='python',
    skipinitialspace=True,
    index_col=0 # 指定第一列为索引
)

多级索引表格(示例表格2)解析代码

table2_text = """                                     Name
NOC                      Discipline      
United States of America Athletics    144
Germany                  Athletics     95
Great Britain            Athletics     75
Italy                    Athletics     73
Japan                    Athletics     70
Bermuda                  Triathlon      1
Libya                    Athletics      1
Palestine                Athletics      1
San Marino               Swimming       1
Kiribati                 Athletics      1
"""
df = pd.read_csv(
    StringIO(table2_text),
    sep=r'\s{2,}',
    engine='python',
    skipinitialspace=True,
    index_col=[0,1] # 指定前两列为多级索引
)

带行号普通表格(示例表格3)解析代码

table3_text = """                       Name       NOC Discipline
1410             CA Liliana  Portugal  Athletics
1411   CABAL Juan-Sebastian  Colombia     Tennis
1412        CABALLERO Denia      Cuba  Athletics
1413  CABANA PEREZ Cristina     Spain       Judo
1414          CABECINHA Ana  Portugal  Athletics
"""
df = pd.read_csv(
    StringIO(table3_text),
    sep=r'\s{2,}',
    engine='python',
    skipinitialspace=True,
    index_col=0 # 指定第一列的行号为索引
)
pandas默认打印结果无法直接解析的设计说明

该设计符合pandas的功能定位,不属于不合理设计:

  • 打印输出的核心定位是人类可读,而非机器可解析,优先保证终端、notebook等场景下的展示美观度,会自动适配窗口宽度、截断过长内容、合并重复索引值,这些优化都会破坏机器解析的一致性
  • pandas本身提供了专门的机器可交换格式输出接口,比如df.to_csv()、df.to_json()、df.to_pickle()等,专门用于数据持久化和传输场景,不需要依赖打印输出做数据传递
  • 如果需要打印的内容也支持直接解析,可以自定义打印格式,比如配置pandas参数输出兼容解析的格式:
    # 直接打印制表符分隔的可解析内容
    print(df.to_csv(sep='\t', na_rep='nan'))
    

内容的提问来源于stack exchange,提问作者Zohar Levi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:57:01