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

Python Dataframe索引设置:高中出勤行为数据处理求助

高中出勤数据的DataFrame索引配置方案

实操步骤

假设你的Excel原始表头包含两行合并/分组信息(对应date和period name),按以下步骤处理:

1. 先完整读取原始数据

先不预设表头,把整个表读进来确认结构:

import pandas as pd

# 替换成你的Excel文件路径
df_raw = pd.read_excel("attendance_data.xlsx", header=None)
# 先看前几行结构,确认表头和数据的分界
print(df_raw.head())

2. 清理冗余行/列

  • 删掉顶部的标题行、空行(比如原始表第一行是"高中出勤统计"这类无关内容,直接df_raw = df_raw.drop([0]))
  • 删掉全空的列,避免干扰:df_raw = df_raw.dropna(axis=1, how="all")

3. 构建双层列索引

假设原始表的第0行是date(比如2024-09-01重复对应不同时段),第1行是period name(比如Period 1/Period 2),前3列的表头在第1行:

# 提取后面列的双层索引:date行+period行
date_list = df_raw.loc[0, 3:].tolist()
period_list = df_raw.loc[1, 3:].tolist()
multi_cols = pd.MultiIndex.from_tuples(zip(date_list, period_list), names=["date", "period name"])

# 提取前3列的表头和所有数据行
main_col_names = df_raw.loc[1, :2].tolist()
data_rows = df_raw.loc[2:, :].values

# 组装最终DataFrame
df_final = pd.DataFrame(data_rows, columns=main_col_names + list(multi_cols))

# 把出勤百分比转成数值类型(按需调整)
df_final["Percent Attendance"] = pd.to_numeric(df_final["Percent Attendance"])

4. 最后验证结构

打印列索引确认是否符合要求:

print(df_final.columns)

输出里前3列是普通列名,后面会显示MultiIndex([('2024-09-01', 'Period 1'), ...], names=['date', 'period name'])

关键提示

  • 如果你的原始表头行位置不同,比如date在第1行、period在第2行,就把代码里的loc[0]、loc[1]对应调整
  • Excel里的合并单元格会被pandas自动填充重复值,刚好适合date层的索引构建
  • 多练loc切片、MultiIndex这类原生方法,比手动写Array高效得多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:59:55