df.replace(regex={‘b‘: {r‘\s*\.\s*‘: np.nan}})

部署运行你感兴趣的模型镜像

这段代码 df.replace(regex={'b': {r'\s*\.\s*': np.nan}}) 试图使用正则表达式替换 DataFrame 中 'b' 列的值,具体行为是:替换所有包含零个或多个空白字符以及一个点(.)的值为 np.nan

详细解析:

  1. df.replace():这是 Pandas 中的 replace() 方法,用于替换 DataFrame 中的值。

  2. regex={'b': {r'\s*\.\s*': np.nan}}

    • regex 参数指定了在替换时使用正则表达式。
    • {'b': {...}} 表示要对列 'b' 进行替换。
    • {r'\s*\.\s*': np.nan} 是一个字典,表示要匹配的正则表达式和替换的值:
      • r'\s*\.\s*' 是正则表达式,用来匹配零个或多个空白字符加一个点(.)再加零个或多个空白字符。
      • np.nan 是替换的目标值,表示缺失值。

替换的操作:

  • 'b' 列中,所有值匹配正则表达式 \s*\.\s* 的地方(即含有点和前后空白字符的地方)都会被替换成 np.nan

示例:

假设你有一个 DataFrame,如下所示:

import pandas as pd
import numpy as np

# 示例 DataFrame
df = pd.DataFrame({
    'a': [1, 2, 3],
    'b': [' . ', 'x', ' .']
})

# 使用 replace() 方法替换
df = df.replace(regex={'b': {r'\s*\.\s*': np.nan}})

print(df)

输出:

   a    b
0  1  NaN
1  2    x
2  3  NaN

解释:

  • 'b' 列中,所有的 " . "" ." 被匹配并替换为 NaN(缺失值)。
  • 其他值(如 'x')没有被匹配,因此保持不变。

总结:

这段代码使用正则表达式 \s*\.\s* 查找 'b' 列中包含零个或多个空白字符和点的值,然后将这些值替换为 NaN

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

import pandas as pd import numpy as np import os def preprocess_data(file_path): """数据预处理主函数,保留原始表格结构""" try: # ===== 数据读取 ===== # 读取时保留原始表头结构(header=1对应实际数据开始行) df = pd.read_excel(file_path, sheet_name='Sheet1', header=1) print("原始数据维度:", df.shape) # ===== 列名修复 ===== # 重命名关键列(根据实际数据位置) df = df.rename(columns={ df.columns[0]: '一级指标', df.columns[1]: '空列1', # 原始表格中的空白列 df.columns[2]: '二级指标', df.columns[3]: '空列2', df.columns[4]: '空列3', df.columns[5]: '空列4' }) # ===== 结构还原 ===== # 删除原始表格中的空白列(保留实际数据列) df = df.drop(columns=['空列1','空列2','空列3','空列4']) # 合并一级指标(模拟原始表格的合并单元格效果) df['一级指标'] = df['一级指标'].ffill() # ===== 数据清洗 ===== # 清洗二级指标名称 df['二级指标'] = df['二级指标'].str.split('(').str[0].str.strip() # ===== 数值处理 ===== # 识别年份列(2010-2024) year_cols = [col for col in df.columns if str(col).isdigit()] print("识别到的年份列:", year_cols) # 统一缺失值处理(替换多种缺失标记) df[year_cols] = df[year_cols].replace(['无', '', 'NA', 'NaN'], np.nan) # 特殊列处理 if '海关进出口总值(万美元)' in df['二级指标'].values: idx = df[df['二级指标'] == '海关进出口总值(万美元)'].index df.loc[idx, year_cols] = ( df.loc[idx, year_cols] .astype(str) .replace('nan', np.nan) .apply(lambda x: x.str.replace(r'e\+0?', 'e', regex=True)) .astype(float) ) # ===== 类型转换 ===== for col in year_cols: df[col] = pd.to_numeric(df[col], errors='coerce') # ===== 缺失值处理 ===== # 横向插值(按时间序列趋势填充) df[year_cols] = df[year_cols].interpolate(axis=1, method='linear', limit_direction='both') # 列均值填充剩余缺失值 for col in year_cols: df[col] = df[col].fill
03-30
###生成patients_mrna_zcores.csv import pandas as pd import numpy as np # 1. 读取 data_mrna_seq_fpkm_zscores_ref_all_samples.csv file_path = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TCGA GDC,2025)\aml_tcga_gdc\data_mrna_seq_fpkm_zscores_ref_all_samples.csv" df = pd.read_csv(file_path, index_col=0) # 第一列作为行索引(如 Entrez_Gene_Id) # 2. 提取病人 ID(列名前12位) col_to_patient = {col: col[:12] for col in df.columns} patient_cols = {} for col, patient in col_to_patient.items(): patient_cols.setdefault(patient, []).append(col) # 3. 聚合:对每个病人,计算每行(基因)的平均表达值 result_df = pd.DataFrame(index=df.index) # 行:基因(Hugo_Symbol 或 Entrez_Gene_Id) for patient, cols in patient_cols.items(): result_df[patient] = df[cols].mean(axis=1) # 自动忽略 NaN 进行均值计算 # 4. 加载完整病人列表 info_file = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TCGA GDC,2025)\patients_metainfo.csv" df_info = pd.read_csv(info_file) all_patients = df_info['PATIENT_ID'].drop_duplicates().astype(str).tolist() # 确保当前列也是字符串类型 result_df.columns = result_df.columns.astype(str) # 5. 找出缺失病人 missing_patients = [pid for pid in all_patients if pid not in result_df.columns] # 6. 为缺失病人添加 NA 列 for pid in missing_patients: result_df[pid] = np.nan # 7. 按照完整病人列表顺序排列列 result_df = result_df[all_patients] # 8. 清理潜在空字符串(如有) result_df.replace(r'^\s*$', np.nan, regex=True, inplace=True) # 9. ✅ 关键修改:保存时明确将 NA 输出为 'NA' output_path = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TCGA GDC,2025)\patients_mrna_zcores.csv" result_df.to_csv(output_path, index=True, na_rep='NA') # ✅ 添加 na_rep 参数 print(f"✅ mRNA z-scores 数据聚合完成!") print(f"📊 维度:{result_df.shape[0]} 个基因 × {result_df.shape[1]} 名患者") print(f"📁 所有缺失值已统一填充并导出为 'NA'") print(f"💾 结果已保存至:\n{output_path}")要求同上
09-27
import pandas as pd import numpy as np import os # ============================= # 配置路径 # ============================= INPUT_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\aml_target_gdc\data_mrna_seq_fpkm_zscores_ref_all_samples.csv" CNA_INPUT_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\aml_target_gdc\data_cna.csv" # 新增:CNA 输入路径 PATIENTS_INFO_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\patients_metainfo.csv" OUTPUT_MRNA_CSV = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\patients_mrna_zcores.csv" # 新增输出路径 # ============================= # 步骤1:读取 mRNA Z-scores 数据(宽表) # ============================= print("📥 正在读取 mRNA z-scores 数据...") try: df_mrna = pd.read_csv(INPUT_PATH, index_col=0, low_memory=False) except Exception as e: raise RuntimeError(f"❌ 无法读取 mRNA 文件:{e}") if df_mrna.empty: raise ValueError("❌ mRNA 数据为空,请检查文件内容。") print(f"📊 mRNA 数据形状:{df_mrna.shape}") print(f"🔍 mRNA 列示例:{list(df_mrna.columns)[:5]}") # === 修改后的列提取与病人 ID 聚合逻辑 === # 提取以 "TARGET" 开头的样本列 valid_columns = [col for col in df_mrna.columns if col.startswith("TARGET")] if len(valid_columns) == 0: raise ValueError("❌ 未检测到任何以 'TARGET' 开头的样本列,请检查 data_mrna_seq_rpkm_zscores_ref_all_samples.csv 格式。") # 从样本 ID 提取病人 ID:TARGET-20-PAEEYP-09A → TARGET-20-PAEEYP(取前3段) col_to_patient = {} for col in valid_columns: parts = col.split('-') if len(parts) >= 4: patient_id = '-'.join(parts[:3]) # 如 TARGET-20-PAEEYP col_to_patient[col] = patient_id else: raise ValueError(f"❌ 样本列名格式不合法: {col}") # 按病人 ID 聚合所有属于该病人的列 patient_to_cols = {} for col, patient in col_to_patient.items(): patient_to_cols.setdefault(patient, []).append(col) print(f"✅ 成功识别 {len(valid_columns)} 个 TARGET 样本,对应 {len(patient_to_cols)} 个唯一病人。") # ============================= # 步骤2:读取并处理 CNA 数据 # ============================= # 步骤3:加载并清洗病人元信息 # ============================= try: patients_info = pd.read_csv(PATIENTS_INFO_PATH, dtype=str) except Exception as e: raise FileNotFoundError(f"❌ 无法读取病人信息文件:{e}") if 'PATIENT_ID' not in patients_info.columns: raise KeyError("❌ 缺少 'PATIENT_ID' 列") patients_info['PATIENT_ID'] = patients_info['PATIENT_ID'].str.strip() all_patient_ids = patients_info['PATIENT_ID'].dropna().tolist() print(f"📌 清洗后共 {len(all_patient_ids)} 名患者可用于匹配。") # ============================= # 步骤4:构建最终 mRNA 表达矩阵(按元信息顺序) # ============================= final_mrna_data = {} matched_mrna_count = 0 for pid in all_patient_ids: if pid in df_expr.columns: final_mrna_data[pid] = df_expr[pid] matched_mrna_count += 1 else: final_mrna_data[pid] = np.nan final_mrna_df = pd.DataFrame(final_mrna_data, index=df_expr.index) final_mrna_df.replace(r'^\s*$', np.nan, regex=True, inplace=True) print(f"✅ mRNA 匹配到 {matched_mrna_count} 名患者") print(f"❌ mRNA 无数据患者数:{len(all_patient_ids) - matched_mrna_count}") # ============================= # 步骤5:构建最终 CNA 表达矩阵(按元信息顺序) # ============================= # 步骤6:转置并保存结果(病人 × 基因) # ============================= os.makedirs(os.path.dirname(OUTPUT_MRNA_CSV), exist_ok=True) # 保存 mRNA 结果 result_mrna_df = final_mrna_df.T.reset_index() result_mrna_df.rename(columns={'index': 'PATIENT_ID'}, inplace=True) result_mrna_df.to_csv(OUTPUT_MRNA_CSV, index=False, na_rep='NA', encoding='utf-8') print(f"✅ 成功保存 mRNA 结果到:\n{OUTPUT_MRNA_CSV}")#%% import pandas as pd import numpy as np import os # ============================= # 配置路径 # ============================= INPUT_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\aml_target_gdc\data_mrna_seq_fpkm_zscores_ref_all_samples.csv" CNA_INPUT_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\aml_target_gdc\data_cna.csv" # 新增:CNA 输入路径 PATIENTS_INFO_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\patients_metainfo.csv" OUTPUT_MRNA_CSV = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\patients_mrna_zcores.csv" # 新增输出路径 # ============================= # 步骤1:读取 mRNA Z-scores 数据(宽表) # ============================= print("📥 正在读取 mRNA z-scores 数据...") try: df_mrna = pd.read_csv(INPUT_PATH, index_col=0, low_memory=False) except Exception as e: raise RuntimeError(f"❌ 无法读取 mRNA 文件:{e}") if df_mrna.empty: raise ValueError("❌ mRNA 数据为空,请检查文件内容。") print(f"📊 mRNA 数据形状:{df_mrna.shape}") print(f"🔍 mRNA 列示例:{list(df_mrna.columns)[:5]}") # === 修改后的列提取与病人 ID 聚合逻辑 === # 提取以 "TARGET" 开头的样本列 valid_columns = [col for col in df_mrna.columns if col.startswith("TARGET")] if len(valid_columns) == 0: raise ValueError("❌ 未检测到任何以 'TARGET' 开头的样本列,请检查 data_mrna_seq_rpkm_zscores_ref_all_samples.csv 格式。") # 从样本 ID 提取病人 ID:TARGET-20-PAEEYP-09A → TARGET-20-PAEEYP(取前3段) col_to_patient = {} for col in valid_columns: parts = col.split('-') if len(parts) >= 4: patient_id = '-'.join(parts[:3]) # 如 TARGET-20-PAEEYP col_to_patient[col] = patient_id else: raise ValueError(f"❌ 样本列名格式不合法: {col}") # 按病人 ID 聚合所有属于该病人的列 patient_to_cols = {} for col, patient in col_to_patient.items(): patient_to_cols.setdefault(patient, []).append(col) print(f"✅ 成功识别 {len(valid_columns)} 个 TARGET 样本,对应 {len(patient_to_cols)} 个唯一病人。") # ============================= # 步骤2:读取并处理 CNA 数据 # ============================= # 步骤3:加载并清洗病人元信息 # ============================= try: patients_info = pd.read_csv(PATIENTS_INFO_PATH, dtype=str) except Exception as e: raise FileNotFoundError(f"❌ 无法读取病人信息文件:{e}") if 'PATIENT_ID' not in patients_info.columns: raise KeyError("❌ 缺少 'PATIENT_ID' 列") patients_info['PATIENT_ID'] = patients_info['PATIENT_ID'].str.strip() all_patient_ids = patients_info['PATIENT_ID'].dropna().tolist() print(f"📌 清洗后共 {len(all_patient_ids)} 名患者可用于匹配。") # ============================= # 步骤4:构建最终 mRNA 表达矩阵(按元信息顺序) # ============================= final_mrna_data = {} matched_mrna_count = 0 for pid in all_patient_ids: if pid in df_expr.columns: final_mrna_data[pid] = df_expr[pid] matched_mrna_count += 1 else: final_mrna_data[pid] = np.nan final_mrna_df = pd.DataFrame(final_mrna_data, index=df_expr.index) final_mrna_df.replace(r'^\s*$', np.nan, regex=True, inplace=True) print(f"✅ mRNA 匹配到 {matched_mrna_count} 名患者") print(f"❌ mRNA 无数据患者数:{len(all_patient_ids) - matched_mrna_count}") # ============================= # 步骤5:构建最终 CNA 表达矩阵(按元信息顺序) # ============================= # 步骤6:转置并保存结果(病人 × 基因) # ============================= os.makedirs(os.path.dirname(OUTPUT_MRNA_CSV), exist_ok=True) # 保存 mRNA 结果 result_mrna_df = final_mrna_df.T.reset_index() result_mrna_df.rename(columns={'index': 'PATIENT_ID'}, inplace=True) result_mrna_df.to_csv(OUTPUT_MRNA_CSV, index=False, na_rep='NA', encoding='utf-8') print(f"✅ 成功保存 mRNA 结果到:\n{OUTPUT_MRNA_CSV}") #%% import pandas as pd import numpy as np import os # ============================= # 配置路径 # ============================= INPUT_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\aml_target_gdc\data_mrna_seq_fpkm_zscores_ref_all_samples.csv" CNA_INPUT_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\aml_target_gdc\data_cna.csv" # 新增:CNA 输入路径 PATIENTS_INFO_PATH = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\patients_metainfo.csv" OUTPUT_MRNA_CSV = r"D:\Acute Myeloid Leukemia数据源\Acute Myeloid Leukemia(TARGET GDC,2025)\patients_mrna_zcores.csv" # 新增输出路径 # ============================= # 步骤1:读取 mRNA Z-scores 数据(宽表) # ============================= print("📥 正在读取 mRNA z-scores 数据...") try: df_mrna = pd.read_csv(INPUT_PATH, index_col=0, low_memory=False) except Exception as e: raise RuntimeError(f"❌ 无法读取 mRNA 文件:{e}") if df_mrna.empty: raise ValueError("❌ mRNA 数据为空,请检查文件内容。") print(f"📊 mRNA 数据形状:{df_mrna.shape}") print(f"🔍 mRNA 列示例:{list(df_mrna.columns)[:5]}") # === 修改后的列提取与病人 ID 聚合逻辑 === # 提取以 "TARGET" 开头的样本列 valid_columns = [col for col in df_mrna.columns if col.startswith("TARGET")] if len(valid_columns) == 0: raise ValueError("❌ 未检测到任何以 'TARGET' 开头的样本列,请检查 data_mrna_seq_rpkm_zscores_ref_all_samples.csv 格式。") # 从样本 ID 提取病人 ID:TARGET-20-PAEEYP-09A → TARGET-20-PAEEYP(取前3段) col_to_patient = {} for col in valid_columns: parts = col.split('-') if len(parts) >= 4: patient_id = '-'.join(parts[:3]) # 如 TARGET-20-PAEEYP col_to_patient[col] = patient_id else: raise ValueError(f"❌ 样本列名格式不合法: {col}") # 按病人 ID 聚合所有属于该病人的列 patient_to_cols = {} for col, patient in col_to_patient.items(): patient_to_cols.setdefault(patient, []).append(col) print(f"✅ 成功识别 {len(valid_columns)} 个 TARGET 样本,对应 {len(patient_to_cols)} 个唯一病人。") # ============================= # 步骤2:读取并处理 CNA 数据 # ============================= # 步骤3:加载并清洗病人元信息 # ============================= try: patients_info = pd.read_csv(PATIENTS_INFO_PATH, dtype=str) except Exception as e: raise FileNotFoundError(f"❌ 无法读取病人信息文件:{e}") if 'PATIENT_ID' not in patients_info.columns: raise KeyError("❌ 缺少 'PATIENT_ID' 列") patients_info['PATIENT_ID'] = patients_info['PATIENT_ID'].str.strip() all_patient_ids = patients_info['PATIENT_ID'].dropna().tolist() print(f"📌 清洗后共 {len(all_patient_ids)} 名患者可用于匹配。") # ============================= # 步骤4:构建最终 mRNA 表达矩阵(按元信息顺序) # ============================= final_mrna_data = {} matched_mrna_count = 0 for pid in all_patient_ids: if pid in df_expr.columns: final_mrna_data[pid] = df_expr[pid] matched_mrna_count += 1 else: final_mrna_data[pid] = np.nan final_mrna_df = pd.DataFrame(final_mrna_data, index=df_expr.index) final_mrna_df.replace(r'^\s*$', np.nan, regex=True, inplace=True) print(f"✅ mRNA 匹配到 {matched_mrna_count} 名患者") print(f"❌ mRNA 无数据患者数:{len(all_patient_ids) - matched_mrna_count}") # ============================= # 步骤5:构建最终 CNA 表达矩阵(按元信息顺序) # ============================= # 步骤6:转置并保存结果(病人 × 基因) # ============================= os.makedirs(os.path.dirname(OUTPUT_MRNA_CSV), exist_ok=True) # 保存 mRNA 结果 result_mrna_df = final_mrna_df.T.reset_index() result_mrna_df.rename(columns={'index': 'PATIENT_ID'}, inplace=True) result_mrna_df.to_csv(OUTPUT_MRNA_CSV, index=False, na_rep='NA', encoding='utf-8') print(f"✅ 成功保存 mRNA 结果到:\n{OUTPUT_MRNA_CSV}") NameError Traceback (most recent call last) ~\AppData\Local\Temp\ipykernel_15128\2221497056.py in <module> 75 matched_mrna_count = 0 76 for pid in all_patient_ids: ---> 77 if pid in df_expr.columns: 78 final_mrna_data[pid] = df_expr[pid] 79 matched_mrna_count += 1 NameError: name 'df_expr' is not defined
最新发布
09-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值