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

Pandas处理Excel中字符串格式datetime列的筛选问题

解决Excel字符串datetime列筛选当日6:00-23:00数据的问题

原方法问题分析

第一种方法失效原因

  1. 索引设置错误:pd.read_excel中指定index_col=9,如果第9列恰好是ingezameldop,该列会被设为DataFrame的索引,无法通过data['ingezameldop']访问,导致筛选条件未实际生效。
  2. 缺少日期筛选:仅通过dt.time.between筛选时间范围,未限定日期为当日,若原数据中大部分记录的时间都在6:00-23:00区间内,输出结果会和原文件一致。

第二种方法问题

截取小时部分后未完成有效筛选逻辑:字符串类型的两位小时(如'06'、'15')可直接用>=/<=比较,但格式不统一时(如单数字小时)容易出错;更可靠的方式是转换为整数后再进行范围判断。

修正后的解决方案

方案一:利用pandas datetime类型(推荐)

通过将字符串列转换为datetime类型,同时筛选日期和时间范围,逻辑清晰且不易出错:

import pandas as pd
from datetime import date

# 读取Excel,避免误设索引导致目标列无法访问
df = pd.read_excel('inzamelbestand.xlsx')

# 将字符串列转换为datetime类型
df['ingezameldop'] = pd.to_datetime(df['ingezameldop'])

# 获取今日日期
today = date.today()

# 组合筛选条件:日期为今日,且时间在6:00-23:00之间
filter_mask = (df['ingezameldop'].dt.date == today) & \
              (df['ingezameldop'].dt.time.between(pd.to_datetime('06:00:00').time(), pd.to_datetime('23:00:00').time()))

# 应用筛选并保存结果
filtered_df = df.loc[filter_mask]
filtered_df.to_excel("oefenexcel.xlsx", index=False)

方案二:字符串截取(适合特殊场景)

如果坚持用字符串操作,需完善小时筛选逻辑,确保比较的准确性:

import pandas as pd
from datetime import date

df = pd.read_excel('inzamelbestand.xlsx')

# 获取今日的日部分(如2024-05-20对应'20')
today_str = str(date.today())
target_day = today_str[-2:]

# 筛选当日数据:匹配字符串中的日部分
df = df.loc[df['ingezameldop'].str[8:10] == target_day]

# 筛选6:00-23:00的数据:截取小时部分转整数后判断范围
df = df.loc[df['ingezameldop'].str[11:13].astype(int).between(6, 23)]

# 保存结果
df.to_excel("oefenexcel.xlsx", index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:20:45