import numpy as npimport pandas as pddf = pdread_csv2023_2_13No12023_2_13_12csvencoding = utf-8df = dfiloc18df_tumor = dfdfname == tumordf_peritumor = dfdfname == peritumor dfname = dfname + dfproper
代码本身没有语法错误,但是可能存在逻辑问题。
-
在对数据进行插值时,使用了df_tumor_A.iloc[:, 2:17].median(),这样只取了tumor_A的中位数,没有考虑其他的样本,可能会导致结果不够准确。
-
在插值时,使用了np.array(conductivity_list[::-1]),这样会将conductivity_list倒序排列,可能会导致插值结果也倒序排列,需要注意。
建议修改如下:
-
对于插值时使用的数据,应该考虑所有的tumor和peritumor样本,可以将它们合并后再进行插值。
-
在插值时,应该保持conductivity_list的顺序不变,可以将它们按照频率从小到大排列。
修改后的代码如下:
import numpy as np import pandas as pd
读取数据
df = pd.read_csv("./2023_2_13No1/2023_2_13_12.csv", encoding='utf-8') df = df.iloc[:, :18] df_tumor = df[df['name'] == 'tumor'] df_peritumor = df[df['name'] == 'peritumor'] df['name'] = df['name'] + df['property'] df_tumor_A = df_tumor[df_tumor['property'] == 'A'] df_tumor_B = df_tumor[df_tumor['property'] == 'B'] df_tumor_C = df_tumor[df_tumor['property'] == 'C']
计算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
按照频率从小到大排列conductivity_list
freq_list = [1, 2, 3, 7, 11, 17, 23, 31, 43, 61, 89, 127, 179, 251, 349] conductivity_list = [5, 200, 1987, 3850, 5650, 7450, 9238, 16000]
对tumor_A进行插值计算
tumor_A_median = df_tumor_A.iloc[:, 2:17].median() tumor_A_conductivity = np.interp(tumor_A_median, df_saline_median.iloc[:, 0:15], conductivity_list)
print("tumor_A_conductivity:", tumor_A_conductivity)
对peritumor进行插值计算
peritumor_median = df_peritumor.iloc[:, 2:17].median() peritumor_conductivity = np.interp(peritumor_median, df_saline_median.iloc[:, 0:15], conductivity_list)
print("peritumor_conductivity:", peritumor_conductivity)
原文地址: https://www.cveoy.top/t/topic/b8NG 著作权归作者所有。请勿转载和采集!