Python Pandas 批量计算 CSV 文件中肿瘤数据的中位数
这段代码使用 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)
这段代码可能存在以下问题:
- 在遍历每个csv文件并计算中位数时,只保存了最后一个'name'的中位数,而没有保存每个'name'的中位数。
- 在保存中位数到文件时,没有指定列名,可能会导致输出文件中的列名不正确。
- 如果存在多个csv文件,输出文件名可能会重复,需要添加一个判断来避免这种情况。
改进建议:
- 在保存中位数时,应该将每个'name'对应中位数保存到一个字典中,然后将字典转换为 DataFrame,再保存到 CSV 文件中。
- 在保存 DataFrame 时,指定列名,以确保输出文件中的列名正确。
- 在生成输出文件名时,可以使用一个计数器来避免文件名重复。
以下代码是对原始代码的改进版本,解决了上述问题:
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 文件中。同时,代码还避免了文件名重复的问题,并确保输出文件中列名正确。
原文地址: https://www.cveoy.top/t/topic/kjbH 著作权归作者所有。请勿转载和采集!