这段代码使用 Python Pandas 库,从指定文件夹中读取多个 CSV 文件,并计算每个文件中'tumor'类型数据的中位数,最终将结果保存到新的 CSV 文件。

import pandas as pd
import os

# 读取文件夹中的所有csv文件
folder_path = './test1/'
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]

# 定义需要筛选的列名
column_names = ['name', 'property']

# 遍历每个csv文件并计算中位数
for file_name in csv_files:
    file_path = os.path.join(folder_path, file_name)
    df = pd.read_csv(file_path)
    df = df.iloc[:,1:33]
    df_tumor = df[df['name'] == 'tumor']
    tumor_dict = {}
    for name in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']:
        df_tumor_name = df_tumor[df_tumor['property'] == name]
        tumor_dict[name] = df_tumor_name
        medians =tumor_dict[name].median()
    
    # 保存中位数到文件
    output_file_name = os.path.splitext(file_name)[0] + '_medians.csv'
    output_file_path = os.path.join(folder_path, output_file_name)
    medians.to_csv(output_file_path, index=False)

这段代码可能存在以下问题:

  1. 在遍历每个csv文件并计算中位数时,只保存了最后一个'name'的中位数,而没有保存每个'name'的中位数。
  2. 在保存中位数到文件时,没有指定列名,可能会导致输出文件中的列名不正确。
  3. 如果存在多个csv文件,输出文件名可能会重复,需要添加一个判断来避免这种情况。

改进建议:

  1. 在保存中位数时,应该将每个'name'对应中位数保存到一个字典中,然后将字典转换为 DataFrame,再保存到 CSV 文件中。
  2. 在保存 DataFrame 时,指定列名,以确保输出文件中的列名正确。
  3. 在生成输出文件名时,可以使用一个计数器来避免文件名重复。

以下代码是对原始代码的改进版本,解决了上述问题:

import pandas as pd
import os

# 读取文件夹中的所有csv文件
folder_path = './test1/'
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]

# 定义需要筛选的列名
column_names = ['name', 'property']

# 遍历每个csv文件并计算中位数
for file_name in csv_files:
    file_path = os.path.join(folder_path, file_name)
    df = pd.read_csv(file_path)
    df = df.iloc[:,1:33]
    df_tumor = df[df['name'] == 'tumor']
    tumor_medians = {}
    for name in ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']:
        df_tumor_name = df_tumor[df_tumor['property'] == name]
        tumor_medians[name] = df_tumor_name.median()

    # 保存中位数到文件
    medians_df = pd.DataFrame.from_dict(tumor_medians, orient='index', columns=['median'])
    output_file_name = os.path.splitext(file_name)[0] + '_medians.csv'
    output_file_path = os.path.join(folder_path, output_file_name)
    medians_df.to_csv(output_file_path, index=True)

经过改进的代码能够正确地计算每个'name'的中位数,并将其保存到一个单独的 CSV 文件中。同时,代码还避免了文件名重复的问题,并确保输出文件中列名正确。

Python Pandas 批量计算 CSV 文件中肿瘤数据的中位数

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

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