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

Pandas dataframe.plot折线图首两个索引数据未绘制问题排查

排查DataFrame索引242.0与243.0未在折线图显示的问题

从你的描述和代码来看,最可能的原因是这两个索引对应的行数据全为NaN,matplotlib绘制折线图时会默认跳过包含NaN的点,导致它们不显示。下面是具体的排查步骤和修复方案:

第一步:确认问题根源

先在代码里添加调试输出,明确这两个索引的状态和对应数据:

修改你的plot函数,在pd.concat之后添加以下代码:

# 保存合并后的DataFrame以便检查
combined_df = pd.concat(dfs, axis=1, sort=False).sort_index()

# 打印DataFrame基本信息,确认索引范围和列数据情况
print("合并后DataFrame的基本信息:")
print(combined_df.info())

# 专门查看索引242.0和243.0的具体数据
print("\n索引242.0与243.0的对应数据:")
print(combined_df.loc[[242.0, 243.0]])

运行后重点关注两个点:

  • 这两个索引是否确实存在于combined_df中
  • 对应行的所有列值是否全为NaN

常见原因与修复方案

原因1:数据全为NaN

如果输出显示这两行全是NaN,说明在合并子DataFrame时,没有任何一个子DataFrame在这两个索引位置有有效数据。你可以根据业务需求选择填充方式:

  • 前向填充(用上一个有效值填充):
    combined_df = combined_df.fillna(method='ffill')
    
  • 后向填充(用下一个有效值填充):
    combined_df = combined_df.fillna(method='bfill')
    
  • 填充为0或其他默认值:
    combined_df = combined_df.fillna(0)
    

填充完成后再调用plot方法,这两个索引的点就会显示出来。

原因2:子DataFrame索引不匹配

如果发现某个子DataFrame的索引里没有242.0和243.0,那需要检查var_info['runs']的生成逻辑,确认这些索引是否应该被包含进来。你可以在循环遍历run_info时添加打印,查看每个变量的索引范围:

for var in run_info:
    ctr += 1
    if not re.search(stat_type, var):
        continue
    var_info = run_info[var]
    print(f"变量{var}的索引范围:{min(var_info['runs'])} 到 {max(var_info['runs'])}") # 添加这行
    try:
        dfs.append(pd.DataFrame({var: var_info['data']}, index=var_info['runs']))
    except:
        print(var_info['data'])
        print(var_info['runs'])
        x=1

如果某个变量本该包含这两个索引却没有,就需要追溯数据收集的逻辑,修复var_info['runs']的生成问题。

原因3:matplotlib跳过不连续点

如果数据不全是NaN但依然不显示,可以尝试在绘图时添加标记点,强制显示所有存在数据的点:

combined_df.plot(kind='line', ax=ax, marker='o') # 添加marker参数

这样即使折线断开,每个有效数据点都会显示为圆点,方便你确认哪些索引有数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:39:01