我正在尝试从“描述”列中计算包含字符串:“ hanger”的单词的数量。所以我定义了一个函数:
def hanger_count(title):
if 'hanger' in title.lower().split():
return True
else:
return False
当我用字符串测试它时,似乎可以正常工作。但是,当我尝试通过data列运行该函数时,请使用以下函数:
ecomm['Description'].apply(hangercount)
我收到了一个错误消息:
AttributeError: 'float' object has no attribute 'lower'
我认为问题在于python将列中的某些行视为对象而不是字符串,我有什么办法可以转换它?
您认为我做错了什么?
答案 0 :(得分:4)
您的列中似乎有混合的数据类型,并且由于lower()
仅是用于字符串的方法,因此当pandas尝试以数字值(在这种情况下为float)调用该函数时,会收到错误消息)。
此快速调整可能对您有用:
def hanger_count(title):
if 'hanger' in str(title).lower().split():
return True
else:
return False
答案 1 :(得分:3)
您可以使用str.contains()
和count()
进行以下操作:
df[df['Description'].str.contains('hanger', case=False, na=False)].count()