如何将重塑后的字符串DataFrame转为整数数组适配SVM算法?
问题描述
现有一个包含整数值的DataFrame,需要将其重塑为新结构:新的vector列每行由原DataFrame每列的连续3行数据组合而成。目前已通过代码实现重塑,但生成的vector列是字符串类型,无法直接转换为整数数组用于SVM算法。
现有实现代码:
import pandas as pd data = pd.DataFrame({'column1': [123, 456, 789, 321, 654, 987, 1234, 45678], 'column2': [123, 456, 789, 321, 654, 987, 1234, 45678]}) data=data.astype(str) #string conv. n = len(data) // 3 #reshaping to new DF # Create a new DataFrame without commas X = pd.DataFrame({ 'vector': [' '.join(data.iloc[i:i+3, :].values.flatten()) for i in range(0, len(data), 3)] })
输出的X结构:
vector 0 123 123 456 456 789 789 1 321 321 654 654 987 987 2 1234 1234 45678 45678
解决方案
方案1:从源头避免字符串转换(推荐)
直接基于原始整数数据处理,跳过字符串转换步骤,生成的结构本身就是数值型,可直接转为numpy数组供SVM使用:
import pandas as pd import numpy as np data = pd.DataFrame({'column1': [123, 456, 789, 321, 654, 987, 1234, 45678], 'column2': [123, 456, 789, 321, 654, 987, 1234, 45678]}) groups = [] # 按每3行一组遍历,每组展平为一维整数数组 for i in range(0, len(data), 3): group_data = data.iloc[i:i+3, :].values.flatten() groups.append(group_data) # 转为DataFrame(可选) X = pd.DataFrame({'vector': groups}) # 直接得到SVM可用的二维整数数组 svm_input = np.array(groups)
注意:最后一组只有2行,展平后长度为4,和前两组的6不一致。如果SVM要求输入维度统一,可根据需求补全(比如补0)或过滤掉最后一组。
方案2:转换现有字符串列
如果必须基于已生成的字符串列X处理,可拆分字符串并转换为整数数组:
# 将字符串列转为整数列表 X['vector'] = X['vector'].apply(lambda s: list(map(int, s.split()))) # 转为numpy数组 svm_input = np.array(X['vector'].tolist())
同样需要处理最后一组长度不一致的问题,确保符合SVM的输入要求。
内容的提问来源于stack exchange,提问作者Rupak
相关产品推荐
相关产品推荐

