У меня есть pandas dataframe df, где один столбец - это «ключевые слова», а другой столбец - «возможные ключевые слова», так что первые две строки выглядят следующим образом:использование функции apply, когда вам нужно передать «self» в качестве аргумента
df['keywords'][0] = 'traveling'
df['possible keywords'][0] = ['traveling', 'fishing','cooking']
df['keywords'][1] = 'fishing'
df['possible keywords'][0] = ['traveling', 'fishing','cooking']
предположим, что каждый элемент в ФР [ «возможные ключевые слова»] серия содержит тот же список, с теми же элементами ([ «путешествия», «рыбалка», «Cooking»]).
Я хочу, чтобы создать третий столбец, где я включаю «возможные ключевые слова», которые не в столбце «Ключевое слово», так что соответствующие строки выглядят следующим образом:
df['non keywords'][0] = ['fishing','cooking']
df['non keywords'][1] = ['traveling','cooking']
Я был в состоянии сделать это с помощью следующей части кода:
def establish(X):
my_list = ['traveling', 'fishing','cooking']
for element in my_list:
if element in X:
my_list.remove(element)
return my_list
data['non keywords'] = data['keywords'].apply(establish)
Однако, я должен был включать в столбце «возможных ключевых слов» как «my_list» в функции создания.
Как я могу сделать то же самое, передавая значение в «возможных ключевыхх» в качестве аргумента функции установки?
Вот проблема с тем, что я пытался до сих пор:
Новая версия установить функцию:
def establish(my_list,X):
for element in my_list:
if element in X:
my_list.remove(element)
return my_list
my_list = ['traveling', 'fishing','cooking']
data['non keywords'] = data['keywords'].apply(establish(my_list))
Traceback (most recent call last):
File "C:\Users\xxx\Anaconda3\lib\site- packages\IPython\core\interactiveshell.py", line 3035, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-21-859ebaa71600>", line 1, in <module>
data['non keywords'] = data['keywords'].apply(establish(my_list))
TypeError: establish() missing 1 required positional argument: 'X'
Если я вместо этого попробовать:
data['non keywords'] = data['keywords'].apply(establish(my_list,data['keywords']))
Вот проблема:
Traceback (most recent call last):
File "C:\Users\xxx\Anaconda3\lib\site- packages\IPython\core\interactiveshell.py", line 3035, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-22-ee891e061f5a>", line 1, in <module>
data['non keywords'] = data['original_keyword'].apply(establish(my_list,data['keywords']))
File "C:\Users\xxxx\Anaconda3\lib\site-packages\pandas\core\series.py", line 2058, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas\src\inference.pyx", line 1046, in pandas.lib.map_infer (pandas\lib.c:56983)
TypeError: 'NoneType' object is not callable
Помощь очень ценится!
привет, спасибо большое за ответ. Я пробовал ваш подход, но результат заключается в том, что «Ни один» не входит в каждую запись данных ['non keywods'] –
hmm .. Я просто попробовал это с вашим примером и получил ['cooking'] для обеих строк 'non keywords' ,Проблема в том, что ваш метод 'install()' сохраняет модификацию одного и того же списка на месте (в вашем случае это произойдет, если функция set возвращает 'None' независимо от ввода). Попробуйте изменить метод 'set()', чтобы сделать что-то вроде 'return [elem for elem in my_list if elem! = X]' или по крайней мере обязательно скопировать 'my_list' вместо редактирования на месте. Надеюсь, что помогает – lemonhead
привет, спасибо большое lemonhead, синтаксис, который вы предложили, работал красиво: def установить (x, my_list): return [elem for elem in my_list if elem not in x]. Кроме того, я мог бы использовать данные ['keywords']. Apply (установить, args = (my_list,)) - я считаю, что он работает в новой версии pandas - в качестве альтернативы использованию functools –