为了账号安全,请及时绑定邮箱和手机立即绑定

根据文件名中特定字符串的存在,从大约 150 个以上 (.csv) 文件中读取数据分为两类

根据文件名中特定字符串的存在,从大约 150 个以上 (.csv) 文件中读取数据分为两类

30秒到达战场 2021-12-17 14:54:43
我正在尝试建立一种在 Python 3 中自动执行大量数据分析的方法。目前,大部分实际分析相当简单(根据 4 个输入文件绘制 2 条曲线并进行一些计算)。因为我总是至少有 4 个文件,所以我目前有这样的东西可以从我正在查看的 4 个文件中读取 .csv 文件中的所有数据。实际上,在任何给定时间都有大约 150 多个文件,我需要一种方法来非常快速地比较所有文件。对于一些背景:1)。所有文件都将位于具有相同路径的同一文件夹中(特定文件名除外)。2)。有两个类别(我称它们为“Control”和“NP”),每个类别有 2 个与之对应的文件:Control-A、Control-B 和 NP-A 和 NP-B。3)。当前有大量信息位于文件名中(实验室条件等数据采集软件在测量期间实时读取),但文件名中间的某个位置包含“暗”或“照亮”。有了这些信息,我试图找到一种方法来一次导入所有文件并根据文件名将它们分开。例如,包含单词“ControlDark”的所有文件将被组合在一起,包含“ControlIlluminated”的所有文件将被组合在一起,对于其他两种组合(“NPDark”和“NPIlluminated”),依此类推。现在,我所拥有的只是一个 GUI,它允许我从特定路径(使用 askopenfilename())手动选择 4 个文件。我不知道有什么好方法可以同时读取数百个 .csv 文件。现在,我一次只能容纳 4 个数据集,因为我不知道一种保存整个文件夹价值数据的方法(没有相应的 askopenfilename() 或 np.genfromtxt('path\filename.csv') )f1 = askopenfilename()f1_data = pd.read_csv(f1, names = ['A', 'B', 'C'])f2 = askopenfilename()f2_data = pd.read_csv(f2, names = ['A', 'B', 'C'])f3 = askopenfilename()f3_data = pd.read_csv(f3, names = ['A', 'B', 'C'])f4 = askopenfilename()f4_data = pd.read_csv(f4, names = ['A', 'B', 'C'])基本上我用 askopenfilename() 命令调出一个 gui 并手动查找有问题的 4 个文件。但是,我想自动执行此操作,以便我可以从一开始就将所有约 150 多个文件转储到该文件中。我找到了一种开始的方法,但是我在将每个文件读入它自己的数据结构时遇到了一些困难。到目前为止,我有:import globimport pandas as pdimport ospath = r'full\path\here'all_files = glob.glob(os.path.join(path, "*.csv"))#Setting up a list for each of the 4 files I need to generate each plotDarkControl = []IllControl = []DarkNP = []IllNP = []for f in all_files:     if "Control" in f and "Dark" in f:          DarkControl.append(f)     elif "Control" in f and "Illuminated" in f:          IllControl.append(f)     elif "GoldNP" in f and "Dark" in f:          DarkNP.append(f)     elif "GoldNP" in f and "Illuminated" in f:          IllNP.append(f)所以我有每个类别的列表,但现在它是一个字符串列表。有没有一种好方法(可能使用 Pandas 数据框?)为 all_files 中的每个文件 f 创建一个数据框?我绝对想避免为所有文件创建一个庞大的结构。在每个文件中,第一列是我的 x 变量,第二列是我的 y 变量。我想确保我可以针对 x 值绘制任何给定 f 的 y 值和其他一些 f 的 y 值(所有文件的所有 x 值都相同)
查看完整描述

1 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

通常我们会要求一个 MVC 示例来测试我们的代码。但是,我想我确实对您的问题有所了解。

如果我正确理解你的问题,你有传感器类型的数据,其中 x 是某种类型的时间轴,并且在多个实验试验中重复。

您在整理文件的正确轨道上,但 Python 列表理解可能是一种更清晰/更 Pythonic 的编写方式

Dark_control=[f for f in all_files if "Control" in all_files if "Dark" in all_files]

您还可以在您的glob.glob.

数据框非常适合这种类型的结构,根据您的数据结构(以及您希望它的设置方式),您也可以使用相同的列表理解来读取数据。

Dark_control=[pd.read_csv(f) for f in all_files if "Control" in all_files if "Dark" in all_files]

上面的代码将创建一个包含所有值的数据框数组,您可以pd.concatpd.join取决于您如何获得最终数据。

不知道为什么不能将所有数据放在一个大型数据框中进行分析(考虑使用多索引将不同的实验试验分开)。


查看完整回答
反对 回复 2021-12-17
  • 1 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信