Python生成CSV列表数据拆分适配模型训练技术问询
问题解决思路
1. 先解释报错原因
你写的df1.iloc[:, [1[0]]]是明显的语法错误——1是整数类型,不能用[0]下标访问,这行代码逻辑完全不成立。而且就算改对这行,也解决不了数值集中在单个单元格的问题,根源出在生成DataFrame的代码里。
2. 核心问题:生成DataFrame时未拆分数组
你原来的代码把数组f1直接作为列表的一个元素,转置后加入DataFrame,导致整个数组被当成单个单元格的值。要让每个数值对应单独单元格,必须把数组的每个元素拆成独立的列。
3. 修改生成DataFrame的代码
先修正原代码的缩进、冗余逻辑,再调整数组的处理方式:
import pandas as pd import numpy as np # 提前定义列名:第一列是标签,后面是数组每个元素对应的列 columns1 = ['label'] + [f'value_{i}' for i in range(512)] df_split = pd.DataFrame(columns=columns1) # 替换成你实际的遍历逻辑(比如遍历源DataFrame的行) for index, row in your_source_df.iterrows(): try: wav_file_name = row['wav_file'] label = labels[row['label']] y = audio_vectors[wav_file_name] length = len(y) start, stop = 0, 512 while stop <= length: f0 = y[start:stop] f1 = np.transpose(f0) # 一维数组转置后无变化,可省略此步 # 将标签和数组所有元素拼接成一行数据 row_data = [label] + list(f1) # 追加到DataFrame(用concat替代已弃用的append) df_split = pd.concat([df_split, pd.DataFrame([row_data], columns=columns1)], ignore_index=True) start, stop = stop, stop + 512 except Exception as e: print(f'发生异常: {e}') # 保存为CSV df_split.to_csv('data/pre_processed/test2.csv', index=False)
关键修改点:
- 提前定义完整列名,确保每个数组元素对应一列
- 将标签和数组元素拼接成列表,让每个元素对应DataFrame的一列
- 移除冗余的
split_test变量,简化逻辑 - 使用
pd.concat替代已弃用的append方法
4. 验证效果
修改后生成的CSV中,label列存储标签,后续每列对应数组的一个数值,所有数值都在独立单元格中,可直接用于模型训练,无需额外拆分。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

