我正在嘗試建立一種在 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”),依此類推?,F在,我所擁有的只是一個 GUI,它允許我從特定路徑(使用 askopenfilename())手動選擇 4 個文件。我不知道有什么好方法可以同時讀取數百個 .csv 文件?,F在,我一次只能容納 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.concat或pd.join取決于您如何獲得最終數據。
不知道為什么不能將所有數據放在一個大型數據框中進行分析(考慮使用多索引將不同的實驗試驗分開)。
添加回答
舉報
0/150
提交
取消
