问题:TypeError:“ float”对象不可迭代

时间:2019-03-03 11:38:23

标签: python python-3.x for-loop floating-point

我在Windows 7上使用python 3.2.2。这是我的代码的一部分。它从excel文件读取。但是当我运行代码时,它只打印0到10并给出“ TypeError:'float'对象是不可迭代的”。 感谢您的帮助!

 pages = [i for i in range(0,19634)]


    for page in  pages:

 x=df.loc[page,["id"]]
 x=x.values
 x=str(x)[2:-2]
 text=df.loc[page,["rev"]]

 def remove_punct(text):
  text=''.join([ch.lower() for ch in text if ch not in exclude])
  tokens = re.split('\W+', text)
  tex = " ".join([wn.lemmatize(word) for word in tokens if word not in stopword])

  removetable = str.maketrans('', '', '1234567890')
  out_list = [s.translate(removetable) for s in tokens1] 
  str_list = list(filter(None,out_list)) 
  line = [i for i in str_list if len(i) > 1]

  return line

 s=df.loc[page,["rev"]].apply(lambda x:remove_punct(x))

 with open('FileNamex.csv', 'a', encoding="utf-8") as f:
     s.to_csv(f, header=False)

 print(s)

这是错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-54-c71f66bdaca6> in <module>()
     33   return line
     34 
---> 35  s=df.loc[page,["rev"]].apply(lambda x:remove_punct(x))
     36 
     37  with open('FileNamex.csv', 'a', encoding="utf-8") as f:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
   3190             else:
   3191                 values = self.astype(object).values
-> 3192                 mapped = lib.map_infer(values, f, convert=convert_dtype)
   3193 
   3194         if len(mapped) and isinstance(mapped[0], Series):

pandas/_libs/src\inference.pyx in pandas._libs.lib.map_infer()

<ipython-input-54-c71f66bdaca6> in <lambda>(x)
     33   return line
     34 
---> 35  s=df.loc[page,["rev"]].apply(lambda x:remove_punct(x))
     36 
     37  with open('FileNamex.csv', 'a', encoding="utf-8") as f:

<ipython-input-54-c71f66bdaca6> in remove_punct(text)
     22 
     23  def remove_punct(text):
---> 24   text=''.join([ch.lower() for ch in text if ch not in exclude])
     25   tokens = re.split('\W+', text)
     26   tex = " ".join([wn.lemmatize(word) for word in tokens if word not in stopword])

TypeError: 'float' object is not iterable

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您正在尝试应用一个迭代text的函数(无论它是什么)-并使用一个float值对其进行调用。

float不能迭代。您可以使用text = str(text)首先将任何输入转换为文本-但是在查看您的代码时,我犹豫地说这是有道理的。

您可以检查是否正在处理这样的浮点数:

def remove_punct(text):

     if isinstance(text,float): 
         pass   #    do something sensible with floats here
         return #    something sensible

     text=''.join([ch.lower() for ch in text if ch not in exclude])
     tokens = re.split('\W+', text)
     tex = " ".join([wn.lemmatize(word) for word in tokens if word not in stopword])

     removetable = str.maketrans('', '', '1234567890')
     out_list = [s.translate(removetable) for s in tokens1] 
     str_list = list(filter(None,out_list)) 
     line = [i for i in str_list if len(i) > 1]

     return line

您可以通过float解决isinstance或从中获得启发 In Python, how do I determine if an object is iterable?介绍如何检测是否提供了 any 迭代。您需要以不同的方式处理不可重复项。