这段代码旨在读取多个 CSV 文件,并根据每个样本的频率响应数据计算电导率,最后将结果保存到文本文件中。

代码片段展示了如何使用 Python 的 pandas 库读取 CSV 文件,以及 numpy 库进行插值计算电导率。代码中定义了 calculate_conductivity 函数,该函数根据样本的频率响应数据和对应的盐溶液中位数计算电导率。

代码中的问题:

代码只读取了一个文件,是因为在遍历文件夹内的所有 CSV 文件时,只有一个文件名符合条件(以“.csv”结尾)。如果文件夹内有多个 CSV 文件,可以尝试修改文件名或者修改代码中的文件匹配条件。例如,可以使用 glob 模块来匹配所有的 CSV 文件:

import glob
# 定义文件夹路径
folder_path = "./test1/"
# 匹配所有csv文件
csv_files = glob.glob(os.path.join(folder_path, "*.csv"))
# 遍历所有csv文件
for file_name in csv_files:
    # 读取csv文件
    df = pd.read_csv(file_name, encoding='utf-8')
    # ...

修改后的代码:

import numpy as np
import pandas as pd
import os
import glob

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 = "./test1/"

# 匹配所有csv文件
csv_files = glob.glob(os.path.join(folder_path, "*.csv"))

# 遍历所有csv文件
for file_name in csv_files:
    # 读取csv文件
    df = pd.read_csv(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))

通过使用 glob.glob 函数,代码能够匹配所有 CSV 文件并进行相应的处理。

注意: 这段代码仅提供了一个基本示例,可能需要根据实际情况进行调整。


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

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