如何遍历Pandas DataFrame 关联MAX_Cell命名tif文件与对应csv文件
问题描述
现有条件
- 存储指定目录下所有文件元信息的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文件读取逻辑,代码如下:
from pathlib import Path import pandas as pd 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
- 文件命名规则:
mRNA_{tif文件名去掉后缀}_Spot_Stats.csv对应{tif文件名},例如mRNA_MAX_Cell09_Spot_Stats.csv对应MAX_Cell09.tif
需求
遍历元信息DataFrame,筛选所有以MAX_Cell开头的原始tif文件,输出其文件路径,同时匹配对应的csv文件名,最终实现tif文件in silico模拟后和对应csv真实数据对比。
实现方案
- 筛选符合要求的tif文件
# 假设存储元信息的DataFrame变量名为meta_df max_tif_df = meta_df[meta_df["File Name"].str.startswith("MAX_Cell") & meta_df["File Name"].str.endswith(".tif")].copy()
- 匹配对应的csv文件名
def get_csv_name(tif_name): # 去掉tif后缀 tif_core = tif_name.rsplit(".", 1)[0] return f"mRNA_{tif_core}_Spot_Stats.csv" max_tif_df["csv_file_name"] = max_tif_df["File Name"].apply(get_csv_name)
- 遍历配对文件执行后续处理
for _, row in max_tif_df.iterrows(): tif_path = row["Path"] csv_name = row["csv_file_name"] # 跳过无对应csv的tif文件 if csv_name not in files_dfs: continue # 读取真实数据 real_data = files_dfs[csv_name] # 插入自定义的tif文件in silico模拟逻辑,得到sim_data # sim_data = your_simulation_function(tif_path) # 插入自定义的模拟结果与真实数据对比逻辑 # compare_result = compare_data(sim_data, real_data) # 按需输出结果 print(f"tif文件路径:{tif_path}") print(f"对应csv文件名:{csv_name}") # print(f"对比结果:{compare_result}")
注意事项
- 确认元信息DataFrame的
Path列存储的是完整可用的tif绝对路径,若路径缺失可根据其他列拼接生成 - 处理大量文件时可将
iterrows替换为itertuples提升运行效率
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

