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

Python多条件判断创建season变量为何所有值均为spring?

问题根因

  • 逻辑表达式写法错误:Python中or运算符会从左到右判断布尔值,只要遇到真值就直接返回结果。你写的'september' or 'october' or 'november' in labels['str_date']会先判断非空字符串'september'的布尔值,结果恒为True,所以第一个if条件永远成立,所有行的season直接被赋值为spring,后续条件根本不会生效。
  • 未实现逐行匹配:你直接对整个labels['season']列批量赋值,没有逐行判断str_date的内容,就算条件写对也只会给全列赋同一个值。
  • 分支逻辑错误:你使用了多个独立的if而非elif,就算前面的条件触发,后续的if依然会运行,可能覆盖之前的赋值;且末尾的else只会和最后一个if绑定,前面的分支不会触发else逻辑。
  • 额外拼写错误:代码中febuary拼写错误,正确拼写为february,会导致匹配不到对应月份。

修正方案

推荐使用pandas向量化方法str.contains配合numpy.select实现批量匹配,性能远高于逐行遍历:

import numpy as np

# 按顺序定义季节匹配规则,用正则或逻辑匹配多个月份
conditions = [
    # 匹配9/10/11月,case=False忽略大小写
    labels['str_date'].str.contains('september|october|november', case=False),
    # 匹配12/1/2月
    labels['str_date'].str.contains('december|january|february', case=False),
    # 匹配3/4/5月
    labels['str_date'].str.contains('march|april|may', case=False),
    # 匹配6/7/8月
    labels['str_date'].str.contains('june|july|august', case=False)
]

# 按条件顺序对应季节取值
season_values = ['spring', 'summer', 'autumn', 'winter']

# 生成新列,未匹配到的默认赋值为null
labels['season'] = np.select(conditions, season_values, default='null')

# 绘图
sns.countplot(x='season', data=labels)
plt.show()

计数图展示所有数据均被归类为spring

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:33:00