0
votes

Existe-t-il un module pouvant compter sur une liste de chaînes dans Python?

J'ai défini une liste qui lit le contenu d'un certain nombre de fichiers et les stocke tous. Comment créer un fichier de données, avec chaque nom de fichier dans une rangée et les colonnes correspondantes comptent la survenue de chaque mot et la sortie.

Pour le souci d'exemple, supposons que cela soit bien défini (mais je peux fournir d'origine Code si nécessaire): p>

from collections import Counter
z = ['blue', 'red', 'blue', 'yellow', 'blue', 'red']
Counter(z)
Counter({'blue': 3, 'red': 2, 'yellow': 1})


0 commentaires

3 Réponses :


0
votes
from collections import Counter
df_st = pd.DataFrame()
for i in range(1,3):
    filename = 'file'+str(i)+'.txt'
    with open(filename,'r') as f:
        list_words = []
        word_count = 0
        for line in f:
            for word in line.split():
                word_count = word_count + 1
                list_words.append(word)

    df2 = pd.DataFrame(index = (0,),data=Counter(list_words))
    df2['0_word_count'] = word_count
    df2['0_file_name'] = filename
    df_st = df_st.append(df2, ignore_index=True)
df_st

Out[2]:

    (who    0_file_name 0_word_count    about   and another box but cat cats    ... pet sea sea),   squirrel,   string  that    the turtle  turtles.    with
0   NaN file1.txt   18  NaN 1.0 NaN 1   NaN NaN 1.0 ... 1.0 1.0 NaN NaN 1   1.0 NaN 1   1.0 2.0
1   1.0 file2.txt   18  1.0 NaN 1.0 1   1.0 1.0 NaN ... NaN NaN 1.0 1.0 1   NaN 1.0 1   NaN NaN

0 commentaires

1
votes

Idée est une boucle Soyez un contenu de fichier, les valeurs de filtrage de la liste filtre_words code> par re.findall code>, comptent par compteur code> et créer un dictionnaire pour Dataframe CODE>:

import re
from collections import Counter

words = {'file1': file1_contents, 'file2':file2_contents}

filter_words = ["cat", "dog", "box turtle", "sea horse"]

out = {}
for k, w in words.items():
    new = []
    for fw in filter_words:
        new.extend(re.findall(r"{}".format(fw),w) )
    out[k] = dict(Counter(new))
print (out)
{'file1': {'cat': 1, 'dog': 1}, 'file2': {'cat': 1, 'dog': 1, 'box turtle': 1}}

df = pd.DataFrame.from_dict(out, orient='index').fillna(0).astype(int)
print (df)
       cat  dog  box turtle
file1    1    1           0
file2    1    1           1


1 commentaires

Merci beaucoup pour votre réponse. C'est exactement ce que je cherchais, je pense que je peux changer cela pour répondre à mes besoins. Juste une question rapide - re.findall (r "{}". Format (FW), W) Qu'est-ce que cette ligne fait? Si je le lisez correctement, vous remplissez la liste de la liste [] avec des valeurs de notre liste [filtre_words], si elles sont trouvées dans le dictionnaire {mots}. Est-ce exact? En outre, qu'est-ce que [K] = dict (compteur (nouveau)) fait? J'ai pensé être déjà spécifié comme un dictionnaire



1
votes

Il y a quelques éléments à prendre en compte pour que ce soit pour obtenir ce droit, telle que la manutention de la ponctuation, les pluriels, 1 terme mots à terme 2, etc. xxx pré>

sortie: p>

    cat dog box turtle  sea horse
0   1   1   0           0
1   1   1   1           0


3 commentaires

Merci, c'est très utile


Pas de soucis. S'il vous plaît envisager d'accepter cela comme la réponse si vous trouvez cela utile.


Merci encore. Ça vous dérange de répondre à une question rapide (espérons-le)? Lorsque j'exporte mon Dataframe en CSV, la ligne ne s'affiche pas. Par exemple, rangée 0, la rangée 1 ne montrera pas comme étiquette de la ligne, mais je reçois toutes les colonnes - une idée de la raison? En fait, j'ai fini par utiliser le code ci-dessous par Jezrael, car il me fallait un peu plus facile pour moi de lire et de mettre en œuvre.