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

将多Pandas条件拼接字符串转换为可用于DataFrame过滤的有效条件

将多Pandas条件拼接字符串转换为可用于DataFrame过滤的有效条件

嘿,我完全懂你的困扰——面对没有列名的DataFrame,还要靠一堆重复的条件来过滤行,手动拼接字符串不仅麻烦,还容易写错对吧?我给你两种解决方案,一种直接解决你用拼接字符串的需求,另一种是更优雅的最佳实践:

方案1:直接执行你拼接好的条件字符串

如果你已经生成了那个长条件字符串,可以用Python的eval()函数来执行它,直接得到过滤后的DataFrame:

# 假设你的条件字符串是这样的(补全省略部分示例)
condition_str = '(df == "00 bis 01 Uhr").any(axis = 1) | (df == "01 bis 02 Uhr").any(axis = 1) | (df == "02 bis 03 Uhr").any(axis = 1) | (df == "03 bis 04 Uhr").any(axis = 1)'

# 执行条件并过滤
filtered_df = df[eval(condition_str)]

⚠️ 注意:eval()会执行传入的字符串代码,所以一定要确保这个字符串的来源是安全可信的,别用它执行未知来源的内容,避免代码注入风险。

方案2:更简洁安全的写法(强烈推荐)

其实完全不用拼接字符串,把你要匹配的所有值放到一个列表里,用isin()结合any()就能轻松实现需求,不管DataFrame有多少列都适用:

  1. 先把所有目标值整理成列表:
target_times = [
    "00 bis 01 Uhr",
    "01 bis 02 Uhr",
    "02 bis 03 Uhr",
    "03 bis 04 Uhr",
    # 这里可以继续添加任意多的目标值
]
  1. 用一行代码完成过滤:
filtered_df = df[df.isin(target_times).any(axis=1)]

这个方法的好处太多了:不用重复写一堆df == ...的条件,代码简洁易维护,还完全避开了eval()的安全风险,而且完美适配无列名、列数不固定的DataFrame场景——isin()会检查每一个单元格的值是否在目标列表里,any(axis=1)只要该行有一个单元格匹配就会保留整行。

备注:内容来源于stack exchange,提问作者i.i.k.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:14:36