import os import numpy as np import pandas as pd

定义函数来计算电导率

def calculate_conductivity(df, df_saline_median): conductivity_list = [976,1987,3850,5650,7450,9238] conductivity_list.reverse() result = [] for i in range(len(freq_list)):
ans = df_saline_median.iloc[:,i:i+1]
ans = ans.values.tolist() new_ans = sorted([ans[j][0] for j in range(len(ans))]) result.append(np.interp(df.iloc[:, i+2:i+3].median(), new_ans, conductivity_list)) return result

定义文件夹路径

folder_path = "./2023_2_20No2/"

遍历文件夹内的所有csv文件

for file_name in os.listdir(folder_path): if file_name.endswith(".csv"): # 读取csv文件 df = pd.read_csv(os.path.join(folder_path, file_name), encoding='utf-8') df = df.iloc[:,1:18] df_tumor = df[df['name'] == 'tumor'] df_peritumor = df[df['name'] == 'peritumor']
df['name'] = df['name'] + df['property']

    # 将每个样本按照property分组
    tumor_dict = {}
    peritumor_dict = {}
    for name in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']:
        df_tumor_name = df_tumor[df_tumor['property'] == name]
        df_peritumor_name = df_peritumor[df_peritumor['property'] == name]
        tumor_dict[name] = df_tumor_name
        peritumor_dict[name] = df_peritumor_name
    
    # 计算saline的中位数
    concentration_list = ['saline0.05%', 'saline0.10%', 'saline0.20%', 'saline0.30%', 'saline0.40%', 'saline0.50%']
    df_saline_median = pd.DataFrame(columns=['1kHz_mag','2kHz_mag','3kHz_mag','7kHz_mag','11kHz_mag','17kHz_mag',
                                             '23kHz_mag','31kHz_mag','43kHz_mag','61kHz_mag','89kHz_mag','127kHz_mag',
                                             '179kHz_mag','251kHz_mag','349kHz_mag'])
    for i in concentration_list:
        saline_group = df[df['name'] == i]
        saline_median = saline_group[['1kHz_mag','2kHz_mag','3kHz_mag','7kHz_mag','11kHz_mag','17kHz_mag',
                                      '23kHz_mag','31kHz_mag','43kHz_mag','61kHz_mag','89kHz_mag','127kHz_mag',
                                      '179kHz_mag','251kHz_mag','349kHz_mag']].median()
        df_saline_median.loc[i] = saline_median
    
    # 计算每个样本的电导率并存储结果
    freq_list = [1, 2, 3, 7, 11, 17,23,31,43, 61, 89,127,179,251,349]
    conductivity_list = [976,1987,3850,5650,7450,9238]
    conductivity_list.reverse()
    for name in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']:
        tumor_result = calculate_conductivity(tumor_dict[name], df_saline_median)
        tumor_result = " ".join(str(i[0]) for i in tumor_result)
        with open(os.path.join(folder_path, file_name[:-4] + f"_tumor_{name}.txt"), "w") as f:
            f.write(tumor_result)
    
        peritumor_result = calculate_conductivity(peritumor_dict[name], df_saline_median)
        with open(os.path.join(folder_path, file_name[:-4] + f"_peritumor_{name}.txt"), "w") as f:
            f.write(" ".join(str(i) for i in peritumor_result))
批量处理CSV文件计算电导率并存储结果

原文地址: https://www.cveoy.top/t/topic/jKmS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录