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)
注意事项
- 若标签时间没有匹配到任何音频文件,会被自动过滤,可根据需求调整无匹配场景的处理逻辑
- 若音频文件时间区间存在重叠,同一标签可能匹配到多个文件,可根据业务需求增加去重规则
内容的提问来源于stack exchange,提问作者Monika_kosecka
相关产品推荐
相关产品推荐

