如何在Excel/CSV插入wav/ogg/mp3音频以便用panda加载制作ML数据集
音频文件插入Excel/CSV用于ML数据集的正确实现方案
现有操作失效的核心原因
- CSV是纯文本分隔格式,本身不支持存储任何二进制嵌入式对象,你通过「插入对象」功能添加的音频仅为本地文件的临时引用,不会真的写入CSV文件,换环境、转移文件就会丢失。
- Excel的「插入对象」是OLE格式的嵌入式二进制内容,pandas读取Excel的默认逻辑仅解析单元格的文本、数值、公式计算结果,不会识别读取OLE对象,因此返回空值nan。
方案1(ML数据集首选):存储音频相对路径
这是工业界音频数据集的通用规范,读写效率高,不会导致表格体积异常膨胀。
操作流程:
- 统一整理所有音频文件到数据集根目录下的固定子目录,例如
./audio,所有wav/ogg/mp3文件都存入该目录。 - 在CSV/Excel中新增
audio_path列,填入对应音频的相对路径,例如./audio/sample_003.mp3。 - 后续用pandas加载后直接按路径读取音频即可,Colab环境下只要保持目录结构不变、路径映射正确即可正常读取。
示例代码:
import pandas as pd import librosa # 也可替换为soundfile等其他音频处理库 # 读取表格 df = pd.read_csv("dataset.csv") # 遍历加载音频 for _, row in df.iterrows(): # sr=None表示保留音频原始采样率 audio_arr, sample_rate = librosa.load(row["audio_path"], sr=None) # 后续ML预处理逻辑
方案2(单文件存储需求场景):存储音频Base64编码
如果你需要把音频内容和表格整合为单个文件、不需要附带额外音频目录,可以使用该方案,缺点是Base64编码会让音频体积增大33%左右,仅适合小体量数据集。
写入表格的编码代码
import base64 import pandas as pd from pathlib import Path def audio2base64(file_path): with open(file_path, "rb") as f: return base64.b64encode(f.read()).decode("utf-8") # 批量生成数据集 audio_files = list(Path("./audio").glob("*.wav")) df = pd.DataFrame({ "sample_id": [f.stem for f in audio_files], "audio_b64": [audio2base64(f) for f in audio_files] }) # 支持保存为CSV或Excel格式 df.to_csv("dataset_single_file.csv", index=False, encoding="utf-8")
读取表格的解码代码
import io import base64 import pandas as pd import librosa df = pd.read_csv("dataset_single_file.csv") for _, row in df.iterrows(): # 解码base64为二进制流 audio_byte = base64.b64decode(row["audio_b64"]) # 直接从内存读取,无需写入临时文件 audio_arr, sample_rate = librosa.load(io.BytesIO(audio_byte), sr=None) # 后续ML预处理逻辑
内容的提问来源于stack exchange,提问作者leopold
相关产品推荐
相关产品推荐

