I have problems filtering numeric data in pandas. enter image description here

我有10,000个数据,我需要它们筛选出第3列中的值>然后是10.

第3列的数据是dtype对象,该列的单元格包含3种类型的数据:点(无)、12.25(单值)、12、45、12.5(多个值,由、分隔).

我试过:

  1. 使用str.Methods用‘,’分隔值
  2. 过滤大于10的拆分值
  3. 然后使用df.loc筛选具有筛选列的主数据帧(筛选值-来自筛选列的值==来自主数据帧的相同列)
#Data sample
{'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}}

推荐答案

如果要保留其值小于阈值的行(例如10.0)

Code

def greater(x, threshold = 10.0):
    '''
        Checks if there is a value > threshold
        
        x values
        - comma separated string
        - float
        - empty  
    '''
    if x and isinstance(x, str) and "," in x:
        # comma separated string
        # Check if list has a value > threshold
        return any(v > threshold for v in [float(i) for i in x.split(',')])
    elif x and isinstance(x, float):
        # Float
        return x > threshold
    else:
        # Empty
        return False

# Generate dataframe from posted data
df = pd.DataFrame(data)

# Keep rows that don't have a value > 10 in column CADD_phred
filtered = df[df.CADD_phred.apply(lambda x: not greater(x, 10.0))]

print(filtered)

Output

POS CHROM   CADD_phred
1   20482980    chr1    .
2   20483463    chr1    .
8   109274570   chr1    1.551
9   109274623   chr1    5.142
11  109274857   chr1    6.579
12  109274968   chr1    1.225
14  109275325   chr1    5.841
15  109275506   chr1    3.850
16  109275536   chr1    4.373
17  109275600   chr1    .
20  109275684   chr1    3.067
21  197042891   chr3    .
22  197042926   chr3    5.925
24  197043111   chr3    9.495

Python相关问答推荐

使用FASTCGI在IIS上运行Django频道

如何使用pandasDataFrames和scipy高度优化相关性计算

仿制药的类型铸造

标题:如何在Python中使用嵌套饼图可视化分层数据?

2D空间中的反旋算法

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

将pandas Dataframe转换为3D numpy矩阵

多指标不同顺序串联大Pandas 模型

Polars asof在下一个可用日期加入

Maya Python脚本将纹理应用于所有对象,而不是选定对象

如何使用OpenGL使球体遵循Python中的八样路径?

为什么t sns.barplot图例不显示所有值?'

如何将泛型类类型与函数返回类型结合使用?

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

提取最内层嵌套链接

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

Matplotlib中的曲线箭头样式

用LAKEF划分实木地板AWS Wrangler

了解如何让库认识到我具有所需的依赖项

判断字典中是否有多个值对