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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:24:33