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

DataFrame切片问题:保留前两列报错及子图分栏需求

问题解决与实现方案

一、搞定保留前两列的KeyError问题

你写的df2=df.loc[:, df['16.3.9']]会报错,核心原因是df['16.3.9']返回的是这一列的数值Series,而loc的列参数需要的是列名、列名列表或者布尔索引,不是列的具体数值内容——程序会把这些数值当成要找的列名,自然找不到就报错了。

要保留前两列,有两种简单靠谱的写法:

  1. 用位置索引iloc(适合不知道列名的情况):
df2 = df.iloc[:, :2]  # 冒号前代表保留所有行,冒号后代表取前2列
  1. 直接指定列名列表(适合明确知道前两列名称的情况):
df2 = df.loc[:, ['2.3.6', '16.3.9']]  # 精准指定要保留的列名

二、切片后生成每张占2列的多张子图

当然可以实现!下面给你一个基于matplotlib的实操示例,思路是把DataFrame按每2列分成一组,为每组单独绘制子图:

示例代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 模拟你的DataFrame结构(替换成你自己的df即可)
data = {
    '2.3.6': [1, 3, 5, 7],
    '16.3.9': [2, 4, 6, 8],
    '9.2.7': [5, 3, 1, 2],
    '4.5.1': [8, 6, 4, 2]
}
df = pd.DataFrame(data, index=['August', 'September', 'October', 'November'])

# 计算子图行数:总列数除以2后向上取整
total_cols = df.shape[1]
rows = np.ceil(total_cols / 2).astype(int)

# 创建子图布局
fig, axes = plt.subplots(nrows=rows, ncols=1, figsize=(10, 6*rows))
axes = axes.flatten()  # 把多维子图数组转成一维,方便循环处理

# 按每2列分组,循环绘制子图
for i in range(0, total_cols, 2):
    cols_group = df.columns[i:i+2]
    ax = axes[i//2]
    df[cols_group].plot(kind='line', ax=ax, marker='o')  # 这里用折线图,可换成柱状图等
    ax.set_title(f'Columns: {", ".join(cols_group)}')
    ax.set_xlabel('Month')
    ax.legend()

plt.tight_layout()  # 自动调整子图间距,避免元素重叠
plt.show()

代码说明

  • 先根据总列数计算需要多少张子图,确保每2列对应一张图;
  • 用flatten()处理子图数组,避免多维索引的麻烦;
  • 循环时每次截取2列数据,在对应子图上绘制,你可以根据需求替换绘图类型(比如kind='bar'画柱状图);
  • tight_layout()能自动优化子图布局,让标题、标签不会互相遮挡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:33