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

在Pandas DataFrame中使用条件值报错TypeError问题求助

解决Pandas新增列时的TypeError问题

嘿,刚接触Pandas遇到这种报错太正常啦,我来帮你搞定它~

为什么会报错?

你说Notes列是object类型,但大概率里面混了NaN缺失值——Pandas里的NaN默认是float类型,当你尝试判断'Thunderstorm' in row['Notes']时,一旦碰到NaN,就会触发TypeError: argument of type 'float' is not iterable,因为没法对浮点数做“是否包含字符串”的判断。

两种解决方案

方案1:先处理缺失值,再用apply判断

先把Notes列的NaN替换成空字符串,避免浮点型干扰,再逐行判断:

# 把NaN替换为空字符串
wdf['Notes'] = wdf['Notes'].fillna('')
# 新增Thunder列:当Notes包含Thunderstorm时取RngT,否则设为None
wdf['Thunder'] = wdf.apply(lambda row: row['RngT'] if 'Thunderstorm' in row['Notes'] else None, axis=1)

方案2:用矢量化的str.contains(更高效)

Pandas的字符串方法str.contains可以直接处理NaN,加上na=False把缺失值当成“不包含”的情况,再配合where方法批量赋值,比apply快很多(适合大数据集):

# 当Notes包含Thunderstorm时保留RngT的值,否则设为NaN(默认)
wdf['Thunder'] = wdf['RngT'].where(wdf['Notes'].str.contains('Thunderstorm', na=False))
# 如果想把不匹配的情况设为其他值(比如0),可以加other参数
# wdf['Thunder'] = wdf['RngT'].where(wdf['Notes'].str.contains('Thunderstorm', na=False), other=0)

小提示

你可以先检查Notes列的缺失值数量,确认是不是这个问题:

print(wdf['Notes'].isna().sum())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:17:17