我有一个包含汽车制造商的列的数据框架。我想申请和fuzzywuzzy改善数据的地方。例如,如果条目与单词Mercedes的匹配度为80%,我希望将其替换为单词Mercedes。这是我目前看到的
df = df.where(fuzz.ratio(df['make'], "Mercedes") >= 80,"Mercedes")
我也试过这个
df.mask (df[fuzz.ratio(df['make'], 'Mercedes') >= 85], 'Mercedes', inplace=True)
我两次得到相同的错误
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
df。其中是函数https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.where.html。我想我理解的错误,我得到我的语法是不正确的,但我不能找出另一种方法。此外,最好是一个非常快速的方法,因为数据帧非常大
提前谢谢你
两件事:
- 您将整个系列传递给
fuzz.ratio
(这会抛出错误)。使用apply
将fuzz.ratio
应用于系列值 df.where
替换条件为False
的值,因此使用<80
这个应该可以工作:
df.where(df['make'].apply(lambda x: fuzz.ratio(x, "Mercedes")) < 80,"Mercedes")