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

使用Pandas read_table读取带MultiIndex的TSV文件时首行丢失问题

解决pandas read_table读取TSV时首行丢失且KeyError的问题

我碰到过类似的情况,咱们来一步步拆解问题:

问题根源

你用pd.read_table("test.pln", header=[0,1], index_col=0)读取文件时,pandas会把前两行解析为多级列标题,第三行开始是数据。但你访问行0触发KeyError,大概率是因为索引列的类型推断问题:文件里第三行的第一列是0,pandas可能把它解析成了字符串类型的索引值'0',而非整数0,所以你用整数0去查找自然会找不到。

另外你说“首行丢失”,其实那行并没有丢失,只是你用错了索引标签去访问它而已。

解决方案

方案1:用正确的索引标签访问

先确认读取后的索引内容:

import pandas as pd
df = pd.read_table("test.pln", header=[0,1], index_col=0)
print(df.index)

如果输出里看到'0'(带引号的字符串),直接用字符串标签访问即可:

# 访问那行全为NaN的数据
print(df.loc['0'])

方案2:转换索引类型

如果希望用整数0访问,可以把索引转换为混合类型(整数+字符串):

df.index = pd.to_numeric(df.index, errors='ignore')
# 现在就能用整数0访问了
print(df.loc[0])

errors='ignore'会把无法转换为数字的索引值(比如GeneA)保持原样,不影响其他行的访问。

方案3:先读取再设置索引

避免读取时直接指定index_col导致的类型推断问题,先完整读取数据,再手动设置索引:

# 先不指定index_col,读取所有内容
df = pd.read_table("test.pln", header=[0,1])
# 将第一列设置为索引
df = df.set_index(df.columns[0])
# 此时索引类型会更准确,直接用df.loc[0]访问即可

方案4:强制指定索引列类型

读取时通过dtype参数强制索引列的类型,比如设为object(字符串):

df = pd.read_table("test.pln", header=[0,1], index_col=0, dtype={0: object})
# 用字符串'0'访问
print(df.loc['0'])

验证

执行完上述任意方案后,你可以用df.head()查看前几行,就能看到那行全为NaN的数据已经正常加载了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:36