pandas 当整个 Dataframe 被分配给一个类时,支持向量机的 Dataframe 结构

slhcrj9b  于 2023-03-11  发布在  其他
关注(0)|答案(2)|浏览(225)

我正面临一个问题,我还没有解决,我希望你们中的一个能帮助我。
我想创建一个支持向量机。到目前为止,我有许多Excel文件,我读成个人(Pandas) Dataframe 。Excel文件都有七列。这些 Dataframe 中的每一个都应该作为一个整体分配给某个类。现在我不确定我应该以哪种格式构建训练数据和测试数据,以便算法将 Dataframe 作为一个整体分配给一个类。我想我会创建一个有八列的 Dataframe 。在前七列中,每行都是Excel文件 Dataframe 中的一列。在第八列中是相关的类。然后依次挂起 Dataframe 。因为据我所知,支持向量机需要类型为float()的参数作为输入。2这是正确的想法吗?3如果是的话,有谁能告诉我如何实现它,因为到目前为止我失败了。
到目前为止,我已经将Excel文件中的各个列读入到 Dataframe 列表中。然后,我从列表中创建 Dataframe 并将它们彼此附加。然后,我将类列表添加为另一列。现在,我想将所有 Dataframe 附加在一起,但发生了错误(见下文)。
有这个必要吗?

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"
mnowg1ta

mnowg1ta1#

第八列是关联类。
据我所知,你的方法是正确的。
关于以下错误:

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第一个参数是panda Dataframe 的可迭代对象,比如list(就像你的第一行),tuple。当你把它们连接起来的时候,它返回一个新的 Dataframe 。
你的第二行仍然正确,尽管我不知道maneuver是什么。
但是,这就是为什么您会在第三行看到错误,因为result现在是单个 Dataframe 。
为了得到你需要的东西,下面是伪代码:

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就是最终的 Dataframe 。

bkhjykvo

bkhjykvo2#

我想我的问题表达得不对,我从168个Excel文件中读取了7列,并将它们保存为列表中的数据框(参见dataframe_list_0 ...)。这意味着这些列表中存储了168个单独的 Dataframe 。然后,我想将它们合并为一个 Dataframe ,从而创建形状为168x7的 Dataframe 。(168 × 1),关联的类存储在168x7 Dataframe 的每一行中。2我想把这些作为另一列添加到168x7 Dataframe 中,以便创建一个168x8 Dataframe 。我想我已经做到了。但现在我希望存储在168行中的 Dataframe 每列都相互追加。这样就不再有分隔。这完全可能吗?或者我处理问题的方式不对吗?因为Excel文件中的表实际上应该作为一个整体来分类。我现在单独地阅读这些列,因为我认为我需要一个168x7的数据框架。我希望我已经用一种或多或少可以理解的方式表达了自己。再次感谢。

相关问题