我正面临一个问题,我还没有解决,我希望你们中的一个能帮助我。
我想创建一个支持向量机。到目前为止,我有许多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"
2条答案
按热度按时间mnowg1ta1#
第八列是关联类。
据我所知,你的方法是正确的。
关于以下错误:
pd.concat
第一个参数是panda Dataframe 的可迭代对象,比如list(就像你的第一行),tuple。当你把它们连接起来的时候,它返回一个新的 Dataframe 。你的第二行仍然正确,尽管我不知道
maneuver
是什么。但是,这就是为什么您会在第三行看到错误,因为
result
现在是单个 Dataframe 。为了得到你需要的东西,下面是伪代码:
那么
df
就是最终的 Dataframe 。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的数据框架。我希望我已经用一种或多或少可以理解的方式表达了自己。再次感谢。