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

如何用Python获取Excel中满足筛选条件的单元格行号

解决Excel按Name和Hour筛选并获取行号的问题

问题分析

你遇到的Hour列显示1970-01-01,是因为pd.to_datetime()会给纯时间的数值自动补充默认日期(1970-01-01),但你的Excel里实际只有时分秒的时间数据,不需要日期部分。我们需要针对纯时间类型做针对性处理,再完成筛选逻辑。

解决方案步骤

1. 正确读取并转换Hour列

针对Excel中的纯时间数据,有两种可靠处理方式:

方式一:转换为timedelta类型(仅保留时分秒)

适合Excel中Hour列是时间格式的场景:

import pandas as pd

# 读取Excel数据(仅读取的话不需要提前创建ExcelWriter)
df = pd.read_excel(file_name, sheet_name="Today")

# 将Hour列转为timedelta类型,自动识别Excel时间格式
df['Hour'] = pd.to_timedelta(df['Hour'])

# 构建筛选条件:Name为John,且Hour等于12小时0分0秒
filtered_rows = df[(df["Name"] == "John") & (df['Hour'] == pd.Timedelta(hours=12))]

方式二:提取时间字符串匹配

适合Excel中Hour列是文本格式(如"12:00:00")的场景:

import pandas as pd

df = pd.read_excel(file_name, sheet_name="Today")

# 将Hour列转为HH:MM:SS格式的字符串
df['Hour'] = pd.to_datetime(df['Hour']).dt.time.astype(str)

# 直接匹配时间字符串
filtered_rows = df[(df["Name"] == "John") & (df['Hour'] == "12:00:00")]

2. 获取对应Excel行号

注意:pandas的DataFrame默认从0开始索引,而Excel行号从1开始,需根据表头位置调整:

  • 如果Excel表头在第1行,数据从第2行开始:
    # 计算对应Excel实际行号
    excel_row_numbers = filtered_rows.index + 2
    print(excel_row_numbers)
    
  • 如果Excel无表头,数据从第1行开始:
    excel_row_numbers = filtered_rows.index + 1
    print(excel_row_numbers)
    

完整示例代码

以方式一为例(适配Excel时间格式场景):

import pandas as pd

file_name = "你的文件路径.xlsx"
df = pd.read_excel(file_name, sheet_name="Today")

# 转换Hour列为timedelta类型
df['Hour'] = pd.to_timedelta(df['Hour'])

# 执行筛选
filtered_data = df[(df["Name"] == "John") & (df['Hour'] == pd.Timedelta(hours=12))]

# 获取Excel行号(假设表头在第1行)
target_row_numbers = filtered_data.index + 2
print("匹配的Excel行号:", target_row_numbers.tolist())

注意事项

  • 仅读取数据时无需创建pd.ExcelWriter,这个对象仅用于写入/追加Excel内容。
  • 如果Excel中Hour列混合了时间格式和文本格式,建议先在Excel中统一格式后再处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:55:21