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

如何从含多行表头的Pandas DataFrame正确读取交通数据?

解决Excel交通流量数据读取与筛选问题

一、正确读取带复合表头的Excel数据

你的Excel表头是两行结构(第一行是方向:西向/北向等,第二行是转向:右转/左转等,同时第二行包含Start Time列),直接用skiprows会丢失表头信息,正确做法是指定两行作为复合表头:

import pandas as pd

# 读取时指定Excel第9、10行(对应pandas的0-based索引8、9)作为表头
df = pd.read_excel("你的文件路径.xlsx", sheet_name="目标工作表", header=[8,9])

# 合并复合表头,处理Start Time列的空表头
df.columns = [
    f"{dir}_{turn}" if dir else time_col 
    for dir, time_col in df.columns
]

# 转换Start Time为时间类型(方便后续时段筛选)
df["Start Time"] = pd.to_datetime(df["Start Time"]).dt.time

这样处理后,你会得到清晰的列名(比如西向_右转、北向_左转)和正常的Start Time时间列,不会丢失任何表头信息。

二、按时段+交通流向筛选数据

1. 定义时段规则

先根据需求设置时段筛选条件,比如:

# 早高峰7-8点
morning_peak = (df["Start Time"] >= pd.to_datetime("07:00:00").time()) & \
               (df["Start Time"] <= pd.to_datetime("08:00:00").time())

# 其他时段可类似定义
# noon_peak = ...
# night = ...

2. 筛选目标数据

直接用loc按条件定位行和列,无需依赖iloc或get_loc()(位置索引远不如列名直观):

# 获取早高峰7-8点西向右转的流量数据
target_data = df.loc[morning_peak, "西向_右转"].tolist()

# 按你需要的格式输出
print(" ".join(map(str, target_data)))

输出示例:

28 38 39 42 43

关键说明

  • 复合表头读取:用header=[n,m]可直接将两行作为多级表头,再通过字符串拼接合并成易识别的列名,完美保留方向+转向的组合信息。
  • 时段筛选:将Start Time转为time类型后,直接用时间范围判断即可完成时段分组。
  • 列定位:合并后的列名直接对应“方向_转向”,用loc按列名取值比位置索引更直观,不易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:31:10