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

如何在if语句中使用dataframe.str.contains判断特定字符?

修正基于DataFrame列判断的Price计算代码

原代码的核心问题是:df['ColumnA'].str.contains('-')返回的是布尔类型的Series(每个元素对应一行的判断结果),而非单个布尔值,直接用is True做整体判断会导致逻辑完全错误——因为整个Series永远不可能等于单个True,最终会全部执行else分支或者触发错误。

以下是三种正确的实现方式:

方法1:使用numpy.where(推荐,向量化高效)

先统一转换列的数值类型,再通过numpy.where实现逐行条件判断:

import numpy as np

# 提前转换数据类型,避免重复计算
df['ColumnB'] = df['ColumnB'].astype(float)
df['ColumnC'] = df['ColumnC'].astype(float)

# 按条件赋值Price列
df['Price'] = np.where(
    df['ColumnA'].str.contains('-'),
    df['ColumnB'] + df['ColumnC'] / 32,
    df['ColumnB'] / 32
)

方法2:使用df.loc条件索引

分两步赋值,先初始化默认值,再更新符合条件的行:

# 转换数据类型
df['ColumnB'] = df['ColumnB'].astype(float)
df['ColumnC'] = df['ColumnC'].astype(float)

# 先设置不包含'-'时的默认值
df['Price'] = df['ColumnB'] / 32
# 生成判断掩码,更新包含'-'的行
mask = df['ColumnA'].str.contains('-')
df.loc[mask, 'Price'] = df.loc[mask, 'ColumnB'] + df.loc[mask, 'ColumnC'] / 32

方法3:使用apply逐行处理(适合复杂逻辑,效率较低)

通过自定义函数逐行判断计算,适合逻辑更复杂的场景:

def compute_price(row):
    col_b = float(row['ColumnB'])
    col_c = float(row['ColumnC'])
    if '-' in row['ColumnA']:
        return col_b + col_c / 32
    else:
        return col_b / 32

df['Price'] = df.apply(compute_price, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:45:57