標題可能不是我想做的事情的完整描述,但我會盡量完整地解釋我在做什么。我有一個包含來自目錄中檔案的所有資料的 Pandas Dataframe。
> Drive Main Project Imaging Folder Experimental Group \ > 0 Z: koch SARS-CoV-2 Project Imaging SmF_SCoV_5'UTR > 1 Z: koch SARS-CoV-2 Project Imaging SmF_SCoV_5'UTR > 79 Z: koch SARS-CoV-2 Project Imaging SmF_SCoV_5'UTR > 80 Z: koch SARS-CoV-2 Project Imaging SmF_SCoV_5'UTR > 91 Z: koch SARS-CoV-2 Project Imaging SmF_SCoV_5'UTR > 92 Z: koch SARS-CoV-2 Project Imaging SmF_SCoV_5'UTR > > > Experimental Rep File Name \ 0 20210424_CMV_SARS_5'UTR mRNA_MAX_Cell09_Spot_Stats.csv 1 > 20210424_CMV_SARS_5'UTR mRNA_MAX_Cell10_Spot_Stats.csv 79 > 20210424_CMV_SARS_5'UTR AVG_BG_MAX_Cell10.tif (RGB).tif 80 > 20210424_CMV_SARS_5'UTR AVG_MAX_Cell10.tif 91 > 20210424_CMV_SARS_5'UTR MAX_Cell09.tif 92 > 20210424_CMV_SARS_5'UTR MAX_Cell10.tif > > Path 7 0 Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'... NaN 1 > Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'... NaN 79 > Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'... None 80 > Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'... None 91 > Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'... None 92 > Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'... None
在這個資料框中,我有 csv 檔案和 tif 檔案。我已經有了可以讀入所有 csv 檔案的代碼,我可以根據檔案名訪問它們。
FINDPATH = Path("Z:\koch\Imaging")
FILEEXT = ("*.csv")
files_dfs = {}
for csv_file in FINDPATH.rglob(FILEEXT):
filename = csv_file.name
df = pd.read_csv(csv_file)
files_dfs[filename] = df
這些 csv 檔案中的每一個都有一個各自的 tif 檔案。例如 mRNA_MAX_Cell09_Spot_Stats.csv 來自 MAX_Cell09.tif。
我現在需要想出一種方法來遍歷資料幀,只取原始 tif 檔案(都命名為 MAX_Cell ...),輸出檔案路徑,最后得到相應的 csv 檔案名。
目標是能夠獲取 tif 檔案并進行計算機模擬并與 csv 檔案中的真實資料進行比較。
我希望這能得到很好的解釋。任何見解都會很有幫助。
謝謝
uj5u.com熱心網友回復:
這里基本上有兩個步驟:
- 獲取細胞編號,以便我們可以匹配屬于同一實驗和細胞編號的檔案。
- 使用 groupby() 執行匹配。
之后,您可以遍歷 groupby,并獲取屬于單個實驗的行。
例子:
s = """Drive,Main,Project,Imaging Folder,Experimental Group,Experimental Rep,File Name,Path
0,Z:,koch,SARS-CoV-2 Project,Imaging,SmF_SCoV_5'UTR,20210424_CMV_SARS_5'UTR,mRNA_MAX_Cell09_Spot_Stats.csv,Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'UTR\mRNA_MAX_Cell09_Spot_Stats.csv
1,Z:,koch,SARS-CoV-2 Project,Imaging,SmF_SCoV_5'UTR,20210424_CMV_SARS_5'UTR,mRNA_MAX_Cell10_Spot_Stats.csv,Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'UTR\mRNA_MAX_Cell10_Spot_Stats.csv
79,Z:,koch,SARS-CoV-2 Project,Imaging,SmF_SCoV_5'UTR,20210424_CMV_SARS_5'UTR,AVG_BG_MAX_Cell10.tif (RGB).tif,Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'UTR\AVG_BG_MAX_Cell10.tif (RGB).tif
80,Z:,koch,SARS-CoV-2 Project,Imaging,SmF_SCoV_5'UTR,20210424_CMV_SARS_5'UTR,AVG_MAX_Cell10.tif,Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'UTR\AVG_MAX_Cell10.tif
91,Z:,koch,SARS-CoV-2 Project,Imaging,SmF_SCoV_5'UTR,20210424_CMV_SARS_5'UTR,MAX_Cell09.tif,Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'UTR\MAX_Cell09.tif
92,Z:,koch,SARS-CoV-2 Project,Imaging,SmF_SCoV_5'UTR,20210424_CMV_SARS_5'UTR,MAX_Cell10.tif,Z:\koch\SARS-CoV-2 Project\Imaging\SmF_SCoV_5'UTR\MAX_Cell10.tif
"""
import pandas as pd
import io
df = pd.read_csv(io.StringIO(s))
# Extract the cell number in the filename of each file
df['Cell Num'] = df['File Name'].str.extract('Cell([0-9] )[._]')
# Extract the filetype for each file
df['File Type'] = df['File Name'].str.extract('\\.([a-z]{2,4})')
# Keep only files which are either csv or tif files of the form MAX_CellNN.tif
df = df.loc[(df['File Type'] == 'csv') | (df['File Name'].str.match("MAX_Cell[0-9] .tif"))]
for group_id, group_df in df.groupby(["Experimental Group", "Experimental Rep", "Cell Num"]):
experimental_group, experimental_rep, cell_num = group_id
print(experimental_group, experimental_rep, cell_num)
file_group = group_df['File Name'].to_list()
print(file_group)
(前八行只是為了使示例可重現。如果您已經擁有資料框,則不需要它們。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372805.html
上一篇:將串列垂直寫入csv檔案
