Использование лямбда-функции для булевых отчетов об индексировании pandas .DataFrame TypeError - PullRequest
0 голосов
/ 28 мая 2020

У меня есть список слов, называемых 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

Я тестировал свою лямбда-функцию в более контролируемой среде, и она работала нормально, поэтому я уверен, что ошибка возникла не оттуда.

Я не понять, почему я получаю эту ошибку, когда сам ничего не повторяю. Я понимаю, что 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

1 Ответ

0 голосов
/ 28 мая 2020

В списке слов были 'NA' и 'NULL', которые Pandas представлены как NaN s. Пришлось указать keep_default_na=False:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...