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

筛选含另一列表未出现值的行:Pandas代码结果异常排查

问题:筛选符合指定后缀规则的行

需求是得到4个True和1个False的结果(最后一行返回False),现有Pandas代码运行后输出全True,不符合预期。

现有代码

import pandas as pd

bucket_file_extensions_df = pd.DataFrame({
    "bucket_file_extensions":
        [["NoExt", "NoExt", "json"], 
         ["log.gz"], 
         ["log.gz"],
         ["yml", "yml", "my-file.yaml"], 
         ["bucket.blah", "json"]]
})

extension_df = pd.DataFrame({
    "non_data_extenions":
        ["NoExt", "json", "gz", "yml", "yaml"]
})

extensions_as_tuple = tuple(extension_df.non_data_extenions.unique())

result = bucket_file_extensions_df.bucket_file_extensions.apply(
    lambda str_list: any(s.endswith(extensions_as_tuple) for s in str_list))

print(result)

当前输出

0    True
1    True
2    True
3    True
4    True
Name: bucket_file_extensions, dtype: bool

预期结果

返回4个True和1个False,其中最后一行需返回False:

0    True
1    True
2    True
3    True
4    False
Name: bucket_file_extensions, dtype: bool

解决方案

原代码使用any()的逻辑是「只要有一个元素匹配后缀就返回True」,这和预期逻辑不符。要实现预期结果,需要判断「该行所有元素是否都能匹配指定后缀」,将any()替换为all()即可:

import pandas as pd

bucket_file_extensions_df = pd.DataFrame({
    "bucket_file_extensions":
        [["NoExt", "NoExt", "json"], 
         ["log.gz"], 
         ["log.gz"],
         ["yml", "yml", "my-file.yaml"], 
         ["bucket.blah", "json"]]
})

extension_df = pd.DataFrame({
    "non_data_extenions":
        ["NoExt", "json", "gz", "yml", "yaml"]
})

extensions_as_tuple = tuple(extension_df.non_data_extenions.unique())

# 将any()替换为all(),判断所有元素是否都匹配后缀规则
result = bucket_file_extensions_df.bucket_file_extensions.apply(
    lambda str_list: all(s.endswith(extensions_as_tuple) for s in str_list))

print(result)

逻辑说明

  • 前4行的所有元素均能匹配指定规则:
    • NoExt、json本身属于指定列表,endswith匹配成立
    • log.gz以gz结尾,匹配成立
    • yml、my-file.yaml分别以yml、yaml结尾,匹配成立
      因此这些行的all()判断返回True
  • 最后一行的bucket.blah无法匹配任何指定后缀,all()判断返回False,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:25:00