Python CSV 文件处理与电导率计算:批量分析和结果合并
import os import numpy as np import pandas as pd
定义函数calculate_conductivity和其他代码
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文件名
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]
创建一个空的DataFrame来保存所有结果
result_df = pd.DataFrame(columns=['Sample', 'Type', 'Freq1', 'Freq2', 'Freq3', 'Freq4', 'Freq5', 'Freq6', 'Freq7', 'Freq8', 'Freq9', 'Freq10', 'Freq11', 'Freq12', 'Freq13', 'Freq14'])
遍历所有csv文件
for csv_file in csv_files: # 读取csv文件 df = pd.read_csv(os.path.join(folder_path, csv_file), 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'] 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 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 for name in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']: tumor_result = calculate_conductivity(tumor_dict[name], df_saline_median) peritumor_result = calculate_conductivity(peritumor_dict[name], df_saline_median) # 将结果添加到result_df中 result_df = result_df.append({'Sample': csv_file, 'Type': f'Tumor {name}', 'Freq1': tumor_result[0], 'Freq2': tumor_result[1], 'Freq3': tumor_result[2], 'Freq4': tumor_result[3], 'Freq5': tumor_result[4], 'Freq6': tumor_result[5], 'Freq7': tumor_result[6], 'Freq8': tumor_result[7], 'Freq9': tumor_result[8], 'Freq10': tumor_result[9], 'Freq11': tumor_result[10], 'Freq12': tumor_result[11], 'Freq13': tumor_result[12], 'Freq14': tumor_result[13]}, ignore_index=True) result_df = result_df.append({'Sample': csv_file, 'Type': f'Peritumor {name}', 'Freq1': peritumor_result[0], 'Freq2': peritumor_result[1], 'Freq3': peritumor_result[2], 'Freq4': peritumor_result[3], 'Freq5': peritumor_result[4], 'Freq6': peritumor_result[5], 'Freq7': peritumor_result[6], 'Freq8': peritumor_result[7], 'Freq9': peritumor_result[8], 'Freq10': peritumor_result[9], 'Freq11': peritumor_result[10], 'Freq12': peritumor_result[11], 'Freq13': peritumor_result[12], 'Freq14': peritumor_result[13]}, ignore_index=True)
将结果保存到新的csv文件中
result_df.to_csv('result.csv', index=False)
原文地址: https://www.cveoy.top/t/topic/jL8Z 著作权归作者所有。请勿转载和采集!