将不同子目录下的多个csv文件附加到一个大文件中



我目前正在使用太阳能电池板构建一个使用随机森林机器学习技术的手势检测系统。我有6种不同的手势(顺时针,滑动,张开拳头等)。我从两个参与者那里收集了每个手势的数据。虽然,我正在努力让我的头脑为我的项目上传和组织数据,为培训、测试和验证做好准备。

两个参与者重复每个手势30次。我使用的PicoScope软件记录了两个变量,时间和电压。这些都保存在一个csv文件中。时间在所有文件中都是常量,但电压会根据上面执行的手势而变化。

我有多个文件,保存在多个文件夹中。我的数据是这样设置的:

  • 我目前有两个文件夹,参与者1,参与者2。
  • 在参与者文件夹中有6个文件夹来表示他们执行的每个手势(顺时针,滑动,张开拳头等)
  • 在每个手势文件夹中有30个csv文件,这些文件是30重复到特定的手势
  • csv文件然后包含两列,时间和电压15,007数据点。目标按其存储的文件夹进行分类在

例如—Participant1/顺时针/Clockwise_23.csv

我将在这里留下一个到数据集的链接:link dataset

我以前从来没有使用过多个文件进行机器学习,我认为我必须在输入机器学习模型之前将所有文件附加在一起。我将上传一张我认为这些数据应该是什么样子的图片。左边是数据当前的样子,右边是数据应该如何格式化?格式的

我一直在研究append,但我还没有见过这么复杂的东西。我有多个子目录。我想与时间,电压及其产生的手势目标的所有csv文件的数据集。它的手势目标可以通过保存它的文件夹找到。有人能帮我一下吗?

我已经设法将所有文件附加在一起-但是目前,所有文件都被添加到相同的两个标题下,留下5507348列。我希望每个文件的数据是可识别的与它自己的标签。一行是Time,然后是下面每个文件的电压读数,最后是它的结果目标(文件保存的文件夹)

如果我理解正确的话,您想循环遍历每个子目录并将所有文件连接到一个更大的数据框架中。

在下面的代码中,我首先创建一个空的数据框架,然后遍历两层子目录,然后开始读取文件。这将循环遍历每两层子目录,并尝试在将所有文件连接到最终编译的数据帧之前将该级别的所有文件读入临时数据帧。

from pathlib import Path
import os
import pandas as pd
df = pd.DataFrame()
rootpathsting= 'C:UsersYourNameRootDir'
rootdir = Path(rootpathsting)
level_1_dirs = [f for f in os.listdir(rootdir) if os.path.isdir(os.path.join(rootdir, f))]
for l1dir in level_1_dirs:
print('Dir: ', l1dir)
l1dirpathstring = rootpathsting + '\' + l1dir
l1dirpath = Path(l1dirpathstring)
level_2_dirs = [f for f in os.listdir(l1dirpath) if os.path.isdir(os.path.join(l1dirpath, f))]
for l2dir in level_2_dirs:
print('Dir: ', l2dir)
l2dirpathstring = l1dirpathstring + '\' + l2dir
l2dirpath = Path(l2dirpathstring)
onlyfiles = [f for f in os.listdir(l2dirpath) if os.path.isfile(os.path.join(l2dirpath, f))]
for f in onlyfiles:
print('File: ', f)
# I think you want the header of the dataframe to have columns for Time and Channel A and you want to skip reading some other rows... 
temp_df = pd.read_csv(f, header=1, skiprows=[0, 2, 3])
display(temp_df)

编辑在此之后,我假设temp_df看起来像这样:

Time  Channel A
0    ##    ##
1    ##    ##
2    ##    ##

如果你想添加文件标识,你可以添加一个多索引到数据框架,像这样…

temp_df = pd.concat({f:temp_df})
# output:
Time  Channel A
anti_clockwise_01     0    ##    ##
1    ##    ##
2    ##    ##

那么您应该能够将所有数据连接到单个数据帧中。我认为这将导致一个数据框架有2个索引(文件名和行号)和2列(时间和频道a)。

df = pd.concat([df, temp_df], axis=1)

相关内容

最新更新