在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
相关产品推荐
相关产品推荐

