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})
3 Réponses :
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
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
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
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. sortie: p> cat dog box turtle sea horse
0 1 1 0 0
1 1 1 1 0
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.