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

Pandas筛选D_EXT_x列指定日期区间并提取对应行前半部分字段问题

多列日期筛选提取关联信息修复方案

需求说明

需要在数据集所有前缀为D_EXT_x的列中,筛选出满足>= "2022-12-01" 且 <= "2024-12-31"的日期,同时提取匹配行中D_EXT_1之前的全部字段信息。

数据集字段清单

  • EMPL. NO
  • NOM A L'EMPLACEMENT
  • ADRESSE
  • VILLE
  • PROV
  • OBJET NO
  • EMPLACEMENT DE L'APPAREIL
  • DESCRIPTION DE L'APPAREIL
  • MANUFACTURIER
  • DIMENSIONS
  • MAWP
  • SVP
  • DERNIERE INSP. EXT.
  • FREQ. EXT.
  • DERNIERE INSP. INT.
  • FREQ. INT.
  • D_EXT_1
  • D_INT_1
  • D_EXT_2
  • D_INT_2
  • D_EXT_3
  • D_INT_3
  • D_EXT_4
  • D_INT_4
  • D_EXT_5
  • D_INT_5
  • D_EXT_6
  • D_INT_6

原有代码核心问题

  1. 筛选列配置错误:需求筛选D_EXT_x前缀列,代码中错误配置为D_INT_前缀
  2. 列数爆炸问题:read_csv默认按逗号分隔读取,若源文件实际为分号、制表符等其他分隔符,会导致单列拆分为多列
  3. 输出字段未限定:筛选完成后返回全表字段,没有仅提取D_EXT_1之前的指定字段

修复后可运行代码

import pandas as pd
# 配置待筛选的D_EXT前缀列
filter_cols = [f'D_EXT_{i}' for i in range(1,7)]
# 读取文件,可根据源文件实际分隔符调整sep参数,比如分号分隔填sep=';',制表符填sep='\t'
data = pd.read_csv("dates.csv", sep=';')
# 将待筛选的列统一转为日期格式,异常值转为空
for col in filter_cols:
    data[col] = pd.to_datetime(data[col], errors='coerce')
# 筛选满足日期区间的行
date_mask = (data[filter_cols] >= pd.to_datetime("2022-12-01")) & (data[filter_cols] <= pd.to_datetime("2024-12-31"))
match_rows = data[date_mask.any(axis=1)]
# 提取D_EXT_1之前的全部字段
dext1_index = data.columns.get_loc('D_EXT_1')
result = match_rows.iloc[:, :dext1_index]
# 输出结果验证
print(result.shape)
print(result)

异常排查说明

如果调整分隔符后列数仍然异常,可先执行print(data.columns)检查读取后的列名是否和预期一致,确认源文件的格式规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:27:04