TypeError: 'float' object is not iterable on a list in built in max function
我正在尝试使用 max 函数及其关键参数在给定实际电影标题的情况下找到与近似电影标题最接近的匹配项。
如果我定义一个示例列表并测试它的功能...
1 2 3 4 5 | from difflib import SequenceMatcher as SM movies = ['fake movie title', 'faker movie title', 'shaun died'] approx_title = 'Shaun of the Dead.' max(movies, key = lambda title: SM(None, approx_title, title).ratio()) 'shaun died' |
但我试图匹配单独数据框中的整个列,所以我尝试将 Pandas 系列转换为列表并运行相同的函数,但我得到了 type_error,即使我已经检查了数据类型两部电影
不是 pandas 专家,无法重现,但取决于文件的读取方式,因为有匹配浮点数的标题(例如法国电影
一个好的解决方法是将数据强制为字符串,如下所示:
1 | movie_lst = [str(x) for x in movie_lst] |
如果字符串已经是字符串,它不会创建字符串的副本(如果值已经是字符串,我应该避免转换为字符串吗?)所以它很有效,而且你肯定只得到字符串.
请注意,您可以通过打印找到违规者:
1 | [x for x in movie_lst if not isinstance(x,str)] |