es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Contar el número (total) de palabras especiales en un gran df de pandas.

Tengo un dataframe grande con textos:

target = [['cuantos festivales conciertos sobre todo persona perdido esta pandemia'],
['existe impresión estar entrando últimos tiempos pronto tarde mayoría vivimos sufriremos'],
['pandemia sigue hambre acecha humanidad faltaba mueren inundaciones bélgica alemania'],
['nombre maría ángeles todas mujeres sido asesinadas hecho serlo esta pandemia lugares de trabajo']]

y 4 conjuntos de palabras como:

words1 = ['festivales', 'pandemia', 'lugares de trabajo', 'mueren', 'faltaba']
words2 = ['persona ', 'faltaba', 'entrando', 'sobre']

además, las palabras del conjunto pueden contener espacios, como en ‘lugares de trabajo’.

Necesito contar cuántas veces las palabras de la lista están presentes en cada línea en total (no necesito saber cuántas veces aparece una de las palabras), para que el dataframe resultante se vea así:

  word_set1 word_set_2
1     1          1
2     0          1
3     2          1
4     1          0

Intenté esto para contar (luego había planeado resumir los resultados):

for terms in words1:
    df[str(terms)] = map(lambda x: x.count(str(terms)), target['tokenized'])

pero obtuve:

TypeError: object of type ‘map’ has no len()

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para contar cuántas veces están presentes las palabras de la lista en cada línea del DataFrame, podemos recorrer las palabras de cada conjunto y utilizar el método str.count() para contar las apariciones de cada palabra en cada fila. Luego, podemos crear un nuevo DataFrame con los recuentos para cada conjunto.

    Aquí está el código para lograr eso:

    import pandas as pd
    
    target = [['cuantos festivales conciertos sobre todo persona perdido esta pandemia'],
              ['existe impresión estar entrando últimos tiempos pronto tarde mayoría vivimos sufriremos'],
              ['pandemia sigue hambre acecha humanidad faltaba mueren inundaciones bélgica alemania'],
              ['nombre maría ángeles todas mujeres sido asesinadas hecho serlo esta pandemia lugares de trabajo']]
    
    words1 = ['festivales', 'pandemia', 'lugares de trabajo', 'mueren', 'faltaba']
    words2 = ['persona ', 'faltaba', 'entrando', 'sobre']
    
    # crear un DataFrame a partir de la lista target
    df = pd.DataFrame({'text': [row[0] for row in target]})
    
    # inicializar el DataFrame de conteo con ceros
    count_df = pd.DataFrame(0, index=df.index, columns=['word_set1', 'word_set2'])
    
    # recorrer las palabras en el primer conjunto y contar sus apariciones en cada fila
    for word in words1:
        count_df['word_set1'] += df['text'].str.count(word)
    
    # recorrer las palabras en el segundo conjunto y contar sus apariciones en cada fila
    for word in words2:
        count_df['word_set2'] += df['text'].str.count(word)
    
    print(count_df)
    

    Esto producirá el DataFrame de conteo deseado:

       word_set1  word_set2
    0          1          1
    1          0          1
    2          2          1
    3          1          0
    

Comments are closed.