导入Twitter文本数据时遇'float'对象无lower属性错误求助
解决'float' object has no attribute 'lower'错误
这个错误的核心原因很清晰——你的tweets['text']列里混进了非字符串类型的值,具体来说是缺失值(NaN)。在pandas中,缺失值NaN的类型是float,当你的word_in_text函数尝试对它调用lower()方法时,自然会抛出属性不存在的错误。
下面给你两种实用的解决思路:
思路1:先清理缺失值
如果可以接受删除缺失数据,直接在处理前移除text列为空的行,从源头上避免传入非字符串值:
# 删除text列存在缺失值的行 tweets = tweets.dropna(subset=['text']) # 再执行添加Trade列的操作 tweets['Trade'] = tweets['text'].apply(lambda tweet: word_in_text('Trade', tweet))
思路2:修改函数兼容非字符串输入
如果不想丢失数据,可以给word_in_text函数加一层类型判断,对非字符串输入直接返回False:
import re def word_in_text(word, text): # 先判断text是否为字符串,非字符串直接返回False if not isinstance(text, str): return False word = word.lower() text = text.lower() match = re.search(word, text) # 简化返回逻辑:直接返回match的布尔值 return bool(match) # 之后正常执行添加列的代码即可 tweets['Trade'] = tweets['text'].apply(lambda tweet: word_in_text('Trade', tweet))
补充说明:出现这种情况通常是因为你导入的Twitter文本数据里,部分行的text字段是空的,pandas自动将这些空值识别为NaN(float类型),才导致了类型不匹配的问题。
内容的提问来源于stack exchange,提问作者ambrish dhaka
相关产品推荐
相关产品推荐

