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
原有代码核心问题
- 筛选列配置错误:需求筛选
D_EXT_x前缀列,代码中错误配置为D_INT_前缀 - 列数爆炸问题:
read_csv默认按逗号分隔读取,若源文件实际为分号、制表符等其他分隔符,会导致单列拆分为多列 - 输出字段未限定:筛选完成后返回全表字段,没有仅提取
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
相关产品推荐
相关产品推荐

