数据帧的结构,当整个数据帧要分配给一个类时,用于支持向量机

问题描述 投票:0回答:2

我遇到了一个我还没有解决的问题,我希望你们中的一个能帮助我。

我想创建一个支持向量机。到目前为止,我有许多 Excel 文件,我将它们读入个人(熊猫)数据帧。 Excel 文件都有七列。这些数据帧中的每一个都应该作为一个整体分配给某个类。现在我不确定我应该以哪种格式构建训练数据和测试数据,以便算法将数据帧作为一个整体分配给一个类。我想我会创建一个包含八列的数据框。在前七列中,每行中的一列来自 Excel 文件的数据框。第八列是关联类。然后一个接一个地挂起数据帧。因为据我了解,支持向量机需要 float() 类型的参数作为输入。 这是正确的想法吗? 如果是这样,有没有人告诉我如何实现这个,因为到目前为止我都失败了。

到目前为止,我已经将 Excel 文件中的各个列读取到数据框列表中。然后我从列表中制作数据框并将它们相互连接。然后我将类列表添加为另一列。 现在我想将所有数据帧附加在一起,但发生错误(见下文)。
这有必要吗?

dataframe_list_0 = [pd.read_excel(filepath + '\\' + file, usecols = [0]) for file in file_list]
dataframe_list_1 = [pd.read_excel(filepath + '\\' + file, usecols = [1]) for file in file_list]
dataframe_list_2 = [pd.read_excel(filepath + '\\' + file, usecols = [2]) for file in file_list]
dataframe_list_3 = [pd.read_excel(filepath + '\\' + file, usecols = [3]) for file in file_list]
dataframe_list_4 = [pd.read_excel(filepath + '\\' + file, usecols = [4]) for file in file_list]
dataframe_list_5 = [pd.read_excel(filepath + '\\' + file, usecols = [5]) for file in file_list]
dataframe_list_6 = [pd.read_excel(filepath + '\\' + file, usecols = [6]) for file in file_list]

dataframe_0 = pd.DataFrame(dataframe_list_0)
dataframe_1 = pd.DataFrame(dataframe_list_1)
dataframe_2 = pd.DataFrame(dataframe_list_2)
dataframe_3 = pd.DataFrame(dataframe_list_3)
dataframe_4 = pd.DataFrame(dataframe_list_4)
dataframe_5 = pd.DataFrame(dataframe_list_5)
dataframe_6 = pd.DataFrame(dataframe_list_6)

result = pd.concat([dataframe_0,dataframe_1,dataframe_2,dataframe_3, dataframe_4,dataframe_5,dataframe_6], axis =1)

result = pd.concat([result, maneuver], axis = 1)
result = pd.concat(result, axis = 0)

# This is the error i get when running the last line of code
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_2632\3320468099.py in <module>
----> 1 result = pd.concat(result, axis = 0)
      2 # This is the Error i get when running the last line:

~\Anaconda3\lib\site-packages\pandas\util\_decorators.py in wrapper(*args, **kwargs)
    309                     stacklevel=stacklevel,
    310                 )
--> 311             return func(*args, **kwargs)
    312 
    313         return wrapper

~\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py in concat(objs, axis, join, ignore_index, keys, levels, names, verify_integrity, sort, copy)
    345     ValueError: Indexes have overlapping values: ['a']
    346     """
--> 347     op = _Concatenator(
    348         objs,
    349         axis=axis,

~\Anaconda3\lib\site-packages\pandas\core\reshape\concat.py in __init__(self, objs, axis, join, keys, levels, names, ignore_index, verify_integrity, copy, sort)
    380     ):
    381         if isinstance(objs, (ABCSeries, ABCDataFrame, str)):
--> 382             raise TypeError(
    383                 "first argument must be an iterable of pandas "
    384                 f'objects, you passed an object of type "{type(objs).__name__}"'

TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"
python pandas dataframe svm
2个回答
0
投票

第八列是关联类。

据我阅读,您的方法是正确的。

关于错误:

result = pd.concat([dataframe_0,dataframe_1,dataframe_2,dataframe_3, dataframe_4,dataframe_5,dataframe_6], axis =1)

result = pd.concat([result, maneuver], axis = 1)
result = pd.concat(result, axis = 0)

pd.concat
第一个参数是 pandas dataframe 的可迭代对象,例如列表(如第一行)、元组。当你连接它们时,它返回一个新的数据框

你的第二行仍然是正确的,虽然我不知道

maneuver
是什么。

但是,这就是您在第三行看到错误的原因,因为

result
现在是单个数据帧。

要得到你需要的,这里是伪代码:

df1 = pd.read_excel(...)
df2 = pd.read_excel(...)
...

df1['class'] = 0  # assign class 0 to df1
df2['class'] = 1  # same business
...
df = pd.concat([df1, df2, ...], axis=0)

然后

df
是您的最终数据框。


0
投票

我想我在问题中表达不正确。 我从 168 个 Excel 文件中总共读取了 7 列,并将它们保存为列表中的数据框(请参阅 dataframe_list_0 ...)。这意味着这些列表中存储了 168 个单独的数据帧。然后我想将它们合并到一个数据框中,这样就创建了一个 168x7 形状的数据框。在机动 (168x1) 中,关联的类存储在 168x7 数据帧的每一行中。我想将这些作为进一步的列添加到 168x7 数据框,以便创建 168x8 数据框。我想我已经做到了。但现在我希望存储在 168 行中的数据帧每列相互附加。以至于不再有分离。这可能吗?还是我以错误的方式处理了这件事? 因为Excel文件中的表格其实应该是作为一个整体来分类的。我现在正在单独读出列,因为我认为我需要一个 168x7 数据框。 我希望我已经以或多或少可以理解的方式表达了自己的意思。 再次感谢。

© www.soinside.com 2019 - 2024. All rights reserved.