关于 python:TypeError: ‘float’ 对象在内置 max 函数的列表中不可迭代

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,即使我已经检查了数据类型两部电影

相关讨论

  • 你试过打印 movie_lst 吗?很可能你是一列之外的东西,你正在迭代浮点数而不是字符。
  • 是的,我已更新问题以显示 movie_lst 的外观。
  • 胡思乱想:难道没有像花车一样名字的电影吗?我认识一个叫"11.6"的法国人。pandas不会自动将其转换为浮点数吗?
  • 你能发布你用来用pandas读取文件的代码吗?
  • 我查了,你是对的,某些标题的标题中有数字
  • 这就是我在文件中读取的方式: rt_info = pd.read_csv(\\'RT_info_Audience.tsv\\', sep = \\'\\\\\\\\t\\', usecols = [0,2, 3, 4, 5, 6, 7] , index_col=False)
  • 您可以尝试使用较短的列表吗?只是要您可以尝试创建一个最小的可重现示例
  • 请注意,执行 movie_lst = [str(x) for x in movie_lst] 不会对字符串造成伤害,并且会将其他任何内容转换为字符串。值得一试。
  • 使用列表的子集(仅前 20 个)没有错误,所以我相信您可能是对的。转换为列表时,有没有办法将这些标题保留为字符串?还是在读取文件时发生转换?谢谢! (我也会尝试你的建议)

不是 pandas 专家,无法重现,但取决于文件的读取方式,因为有匹配浮点数的标题(例如法国电影 11.6),某些数据可能是 s 而不是字符串(你的问题证明它是可能的:))

一个好的解决方法是将数据强制为字符串,如下所示:

1
movie_lst = [str(x) for x in movie_lst]

如果字符串已经是字符串,它不会创建字符串的副本(如果值已经是字符串,我应该避免转换为字符串吗?)所以它很有效,而且你肯定只得到字符串.

请注意,您可以通过打印找到违规者:

1
[x for x in movie_lst if not isinstance(x,str)]

以上是关于 python:TypeError: ‘float’ 对象在内置 max 函数的列表中不可迭代的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>