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

Python Pandas条件赋值:如何为df_data中对应文件匹配df_label标签

Pandas音频标签匹配导出方案

实现逻辑

  • 先将标签时间与音频文件的时间区间做匹配,关联上对应的文件名
  • 再按文件名分组,将同一音频对应的所有标签单独导出为txt文件

代码实现

步骤1:导入依赖并加载数据

import pandas as pd

# 替换为你的实际数据读取逻辑,比如pd.read_csv/ pd.read_excel等
df_data = pd.DataFrame({
    "file_name": ["audio1.wav", "audio2.wav", "audio3.wav"],
    "file_start": [0, 10.5, 25.3],
    "file_end": [10.4, 25.2, 40.0]
})
df_label = pd.DataFrame({
    "Begin Time (s)": [2.1, 8.9, 15.4, 30.0, 38.2]
})

步骤2:匹配标签对应的音频文件

使用交叉合并+条件过滤实现,性能远高于手动for循环:

# 笛卡尔积合并两个表后过滤符合时间区间的匹配项
df_merged = pd.merge(df_label, df_data, how="cross") \
    .query("`Begin Time (s)` >= file_start and `Begin Time (s)` <= file_end")

如果你的Pandas版本较低不支持how="cross",可使用apply替代:

def match_audio(label_time):
    res = df_data[(df_data["file_start"] <= label_time) & (df_data["file_end"] >= label_time)]
    return res["file_name"].iloc[0] if not res.empty else None

df_label["file_name"] = df_label["Begin Time (s)"].apply(match_audio)
df_merged = df_label.dropna(subset=["file_name"])

步骤3:按文件分组导出标签

for file_name, label_group in df_merged.groupby("file_name"):
    # 生成导出txt文件名,可自定义命名规则
    txt_name = f"{file_name.split('.')[0]}_labels.txt"
    # 仅导出时间列,不需要表头和索引,可根据需求调整导出内容
    label_group["Begin Time (s)"].to_csv(txt_name, index=False, header=False)

注意事项

  1. 若标签时间没有匹配到任何音频文件,会被自动过滤,可根据需求调整无匹配场景的处理逻辑
  2. 若音频文件时间区间存在重叠,同一标签可能匹配到多个文件,可根据业务需求增加去重规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:45:03