You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python处理TCGA数据时多小数点字符串转float报错如何解决

解决方法

问题本质

你遇到的报错是因为该列数值存在多个小数点,其中靠前的小数点是千位分隔符,不符合Python float的格式要求。

方案1:正则快速替换(推荐)

直接通过正则匹配需要删除的千位分隔符小数点,规则完全符合你提出的「仅删除小数点后数字位数≤3位的小数点,保留后续位数>3位的小数点」要求:

import pandas as pd

# 已通过pd.read_csv读入数据存为df
df['reads_per_million_miRNA_mapped'] = df['reads_per_million_miRNA_mapped'].str.replace(
    pat=r'\.(?=\d{1,3}\.)',
    repl='',
    regex=True
).astype(float)

正则逻辑说明

  • (?=\d{1,3}\.)是正向预查规则:仅匹配后面紧跟1-3位数字+另一个小数点的小数点
  • 比如1.024.089的第一个小数点符合匹配规则,会被删除,得到1024.089
  • 比如0.204818的小数点后无其他小数点,不会被匹配,保留原有格式

方案2:自定义函数兼容多小数点场景

如果数据中存在超过2个小数点的极端情况,可以用更稳妥的自定义拆分逻辑处理:

def format_mirna_count(s: str) -> str:
    parts = s.split('.')
    # 仅有一个小数点直接返回,多个小数点则仅保留最后一个
    if len(parts) == 1:
        return s
    return ''.join(parts[:-1]) + '.' + parts[-1]

df['reads_per_million_miRNA_mapped'] = df['reads_per_million_miRNA_mapped'].apply(format_mirna_count).astype(float)

处理效果验证

对你提供的样例数据处理后结果如下:

miRNA_IDread_countreads_per_million_miRNA_mapped
hsa-mir-122710.204818
hsa-mir-122851024.089
hsa-mir-1229122457.814

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:24:03