Tenho um dataframe e uma lista abaixo.
import pandas as pd
my_df = pd.DataFrame({'fruits': ['apple', 'banana', 'cherry', 'durian'],
'check': [False, False, False, False]})
my_list = ['pp', 'ana', 'ra', 'cj', 'up', 'down', 'pri']
>>> my_df
fruits check
0 apple False
1 banana False
2 cherry False
3 durian False
Posso criar um resultado com loops for aninhados.
for fruit in my_df['fruits']:
for v in my_list:
if v in fruit:
my_df.loc[my_df['fruits']==fruit, 'check'] = True
>>> my_df
fruits check
0 apple True
1 banana True
2 cherry False
3 durian False
Eu tentei abaixo.
my_df['fruits'].apply(lambda x: True for i in my_list if i in x)
mas, cuspiuType Error: 'generator' object is not cllable
Quero remover loops for aninhados e substituí-los pela função apply. Como posso fazer isso?
Esta linha deve ser corrigida.
A função lambda retorna um gerador, não um booleano (
True
/False value)
. Por outro lado, oapply()
método espera um valor de retorno para cada linha do DataFrame, e esse valor de retorno deve ser um booleano (ou qualquer outro tipo), não um objeto gerador. Além disso, faltaany()
verificar se há correspondências.A linha corrigida é:
Saída:
Fontes:
https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions
https://docs.python.org/3/tutorial/classes.html#generator-expressions
https://docs.python.org/3/library/functions.html#any