Pandas如何根据Dataset文件名数字索引匹配列表值新增列
Pandas按文件名标识匹配新增列方案
初始数据
待处理的DataFrame结构如下:
Dataset Volume_ft3 Sonar_Raster_0.tif 2055 Sonar_Raster_1.tif 6784 Sonar_Raster_FocalMean_5x5_0.tif 2045 Sonar_Raster_FocalMean_5x5_1.tif 6752
待匹配取值列表为 Sonar_pts_List = [5525, 4374],目标是新增Sonar_Points列,提取Dataset字段文件名中末尾的数字标识作为列表索引,匹配对应值填入,最终得到如下结果:
Dataset Volume_ft3 Sonar_Points Sonar_Raster_0.tif 2055 5525 Sonar_Raster_1.tif 6784 4374 Sonar_Raster_FocalMean_5x5_0.tif 2045 5525 Sonar_Raster_FocalMean_5x5_1.tif 6752 4374
之前使用df.append直接拼接DataFrame的方案无法生效,核心原因是append默认做行级追加,既没有提取文件名中的匹配标识,也没有做值的对齐逻辑,自然无法处理带前缀的同标识文件。
实现代码
import pandas as pd # 待匹配取值列表 Sonar_pts_List = [5525, 4374] # 提取标识、匹配值生成新列 df['Sonar_Points'] = ( df['Dataset'] .str.extract(r'_(\d+)\.tif$') # 提取末尾.tif前的数字 .astype(int)[0] # 转为整数类型 .map(lambda idx: Sonar_pts_List[idx]) # 按索引匹配列表值 )
逻辑说明
- 正则规则
r'_(\d+)\.tif$'仅匹配字符串尾部_数字.tif的片段,会自动跳过文件名中间的无关数字(比如5x5中的5),精准拿到需要的0/1索引 - 提取到的索引转为整数后直接映射列表取值,无论文件名前面增加什么处理前缀,只要末尾的数字标识一致就能匹配正确
- 直接做列赋值,不需要额外拼接表结构,不会出现索引错位、匹配错误的问题
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

