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

如何在Pandas中筛选同一单元格内带分隔符的数值数据

Pandas筛选含多值的Object列中满足条件的行

问题背景

有10000条数据,第三列CADD_phred为object类型,单元格包含三种格式:

  • .:代表空值
  • 单个数值(如12.25)
  • 逗号分隔的多个数值(如12,45,12.5)
    需要筛选出该列中至少存在一个数值大于10的行。

解决方案

直接分割后逐个判断效率较低,推荐用apply结合数值转换的方式生成筛选掩码,具体步骤如下:

1. 加载示例数据

import pandas as pd

data = {'POS': {0: 20482821, 1: 20482980, 2: 20483463, 3: 20485526, 4: 20485536, 5: 20485630, 6: 20485811, 7: 20485948, 8: 109274570, 9: 109274623, 10: 109274677, 11: 109274857, 12: 109274968, 13: 109275216, 14: 109275325, 15: 109275506, 16: 109275536, 17: 109275600, 18: 109275641, 19: 109275648, 20: 109275684, 21: 197042891, 22: 197042926, 23: 197043092, 24: 197043111}, 'CHROM': {0: 'chr1', 1: 'chr1', 2: 'chr1', 3: 'chr1', 4: 'chr1', 5: 'chr1', 6: 'chr1', 7: 'chr1', 8: 'chr1', 9: 'chr1', 10: 'chr1', 11: 'chr1', 12: 'chr1', 13: 'chr1', 14: 'chr1', 15: 'chr1', 16: 'chr1', 17: 'chr1', 18: 'chr1', 19: 'chr1', 20: 'chr1', 21: 'chr3', 22: 'chr3', 23: 'chr3', 24: 'chr3'}, 'CADD_phred': {0: 14.27, 1: '.', 2: '.', 3: 17.1, 4: 17.61, 5: '20.1,19.64', 6: 15.99, 7: 15.95, 8: 1.551, 9: 5.142, 10: 14.05, 11: 6.579, 12: 1.225, 13: 14.38, 14: 5.841, 15: 3.85, 16: 4.373, 17: '.', 18: 16.95, 19: 16.94, 20: 3.067, 21: '.', 22: 5.925, 23: 10.3, 24: 9.495}}
df = pd.DataFrame(data)

2. 生成筛选掩码

# 定义判断函数:检查单元格是否有大于10的数值
def has_value_gt10(x):
    if pd.isna(x) or x == '.':
        return False
    # 处理单个数值或逗号分隔的多数值
    values = str(x).split(',')
    try:
        # 转换为浮点数,判断是否存在大于10的值
        return any(float(v) > 10 for v in values)
    except ValueError:
        # 遇到非数值内容直接返回False
        return False

# 生成布尔掩码
mask = df['CADD_phred'].apply(has_value_gt10)

3. 筛选目标数据

filtered_df = df[mask]

关键说明

  • 空值处理:把.和NaN统一视为不满足条件,直接返回False
  • 类型转换:强制把每个分割后的字符串转成浮点数,确保数值判断准确
  • 异常处理:避免单元格出现非数值字符串导致报错
  • 效率优化:apply结合生成器表达式的方式,在10000条数据上运行效率足够

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:09:13