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

加载Parquet文件时,如何用单个过滤器移除1900年出生且未离世的记录?

简化Parquet读取过滤器:移除1900年出生且未去世的记录

需求:移除数据中**1900年出生且death字段为None(尚未去世)**的记录,原本通过两组过滤器实现,现需简化为单个过滤器逻辑。

原实现代码:

import pandas as pd

data = [
    (1900, None,),  # 需要移除的记录
    (1900, 2000,),
    (2000, None,),
    (2000, 2020,),
]
df = pd.DataFrame(data, columns=['birth', 'death'])
df.to_parquet('test.parquet')

# 原过滤器:两组条件,满足任意一组则保留
filters= [
    [
        ('birth', '!=', 1900),
    ],
    [
        ('birth', '=', 1900),
        ('death', 'not in', [None]),
    ]
]

df2 = pd.read_parquet('test.parquet', filters=filters)
print(df2)

简化后的单个过滤器方案

方案一:正向组合逻辑

将需求转化为**「出生年份不等于1900,或者(出生年份等于1900且去世年份不为空)」**,用嵌套逻辑组合实现:

import pandas as pd

# 简化后的单个过滤器
filters = [
    [
        ('birth', '!=', 1900),
        ('or', [('birth', '=', 1900), ('death', 'is not', None)])
    ]
]

df2 = pd.read_parquet('test.parquet', filters=filters)
print(df2)

方案二:反向排除逻辑

直接针对需要移除的记录写反向条件:「不满足(出生年份等于1900且去世年份为空)」,写法更贴合需求描述:

import pandas as pd

filters = [
    [
        ('not', [('birth', '=', 1900), ('death', 'is', None)])
    ]
]

df2 = pd.read_parquet('test.parquet', filters=filters)
print(df2)

逻辑说明

两种方案均等价于原两组过滤器的效果:

  • 方案一通过or组合正向保留的条件,覆盖所有符合要求的记录
  • 方案二通过not直接排除需要移除的目标记录,逻辑更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:22:37