代码之家  ›  专栏  ›  技术社区  ›  Thibaut B.

为pandas使用lambda函数。DataFrame布尔索引报告TypeError

  •  0
  • Thibaut B.  · 技术社区  · 4 年前

    我有一个名为sowpods的单词列表,我需要验证其中是否存在字母组合 作为一个词 在内部 一句话。

    例如,如果我的信件是 ['r', 't', 'e', 'f'] ,其中一种可能的组合是 're' 在里面 'red' 因此,应保留“红色”一词。

    我已经有一些代码可以找出所有可能的组合,但现在我想找到如何将符合要求的所有单词添加到列表中。

    我做了以下工作:

    import pandas as pd
    
    sowpods = pd.read_csv('sowpods.csv', names=['Word'])
    
    possible_combination = 'RE'
    possible_words = pd.DataFrame([], columns=['Word'])
    
    comb_in_word = lambda _: True if (possible_combination in _) else False # ------ line 8
    
    sowpods_bool = sowpods['Word'].apply(comb_in_word) # --------------------------- line 10
    possible_words.append(sowpods.loc[sowpods_bool, 'Word'])
    

    但后来我得到:

     File "c:\tests.py", line 10, in <module>
        sowpods_bool = sowpods['Word'].apply(comb_in_word)
      File "C:\Python38-32\lib\site-packages\pandas\core\series.py", line 3848, in apply
        mapped = lib.map_infer(values, f, convert=convert_dtype)
      File "pandas\_libs\lib.pyx", line 2329, in pandas._libs.lib.map_infer
      File "c:\Users\lenovo\OneDrive\Prog\Projects\Scrabble\tests.py", line 8, in <lambda>
        comb_in_word = lambda _: True if possible_combination in _ else False
    TypeError: argument of type 'float' is not iterable
    

    我在一个更受控的环境中测试了我的lambda函数,它工作得很好,所以我相信错误不是来自那里。

    我不明白为什么我自己不迭代任何东西时会出现这个错误。我知道pandas正在遍历DataFrame的列,但在使用浮点数而不是整数的情况下,它不应该出错。

    编辑:

    [In]
    print(sowpods.head())
    [Out]
          Word
    0      AA
    1     AAH
    2   AAHED
    3  AAHING
    4    AAHS
    
    [In]
    print(sowpods.dtypes)
    [Out]
    Word    object
    dtype: object
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Thibaut B.    4 年前

    单词表上有 'NA' 'NULL' ,Pandas代表的是 NaN s.我必须具体说明 keep_default_na=False :

    sowpods = pd.read_csv('projects/scrabble/sowpods_en.csv', names=['Word'], keep_default_na=False)