如何在CSV列中存储带逗号分隔浮点值的音频采样数组?
问题:如何在CSV列中保留音频数组的逗号分隔格式?
我创建了包含WAV音频采样数组的Pandas DataFrame:
df = pd.DataFrame(data={"wavsamples": pd.Series(wavsamples), "wavsamplerate": pd.Series(wavsamplerate), "wavname": pd.Series(wavname)}, copy=False, columns = ['wavsamples','wavsamplerate','wavname']) df.index.name = 'filenumber'
打印wavsamples列时,内容是逗号分隔的浮点数组,但用df.to_csv导出CSV后,数组里的逗号变成空格,还出现字面意义的省略号,导致后续读取丢失采样值。我知道CSV不是存储WAV数据的理想格式,但想实现:在CSV列中存储带逗号分隔的音频数组,且读取时能完整还原。
解决方案
1. 确保数组转字符串时保留完整内容
Pandas对过长数组会自动截断显示省略号,先设置全局选项避免截断:
pd.set_option('display.max_colwidth', None)
再把wavsamples列的数组转为完整字符串格式:
df['wavsamples'] = df['wavsamples'].apply(str)
2. 导出CSV时用引号包裹字段内容
CSV默认以逗号作为字段分隔符,必须把包含逗号的数组字符串用引号包裹,避免逗号被误判为字段分隔符。使用csv.QUOTE_ALL参数强制所有字段加引号:
import csv df.to_csv('audio_data.csv', quoting=csv.QUOTE_ALL, index=True)
3. 读取CSV时还原数组
读取时用ast.literal_eval把字符串转回数组,通过converters参数指定列的转换函数:
import ast def str_to_array(s): return ast.literal_eval(s) df_read = pd.read_csv('audio_data.csv', converters={'wavsamples': str_to_array}, index_col='filenumber')
内容的提问来源于stack exchange,提问作者Laulito
相关产品推荐
相关产品推荐

