J'essaie de trouver un moyen d'importer un fichier .txt idéalement en tant que données (pandas) en utilisant python 3.5. Je l'ai fait quelques fois avec des données différentes. Ce fichier a quelques milliers de cas/cas, qui prennent chacun 13 lignes suivies par une ligne blanche:Importer un fichier txt avec plus d'une ligne par instance en utilisant python
Cat1: text
…
Cat13: text
Cat1: text
…
Cat13: text …
En utilisant le code suivant, je peux accéder à chaque ligne et de créer un nouveau vecteur par exemple (malheureusement comme vecteur colonne au lieu de vecteur ligne, ce qui pourrait être ajouté à une nouvelle trame de données):
import codecs
import pandas as pd
with codecs.open(‚file.txt', 'r',encoding='utf-8', errors='ignore') as f:
lines = f.readlines()
L = list(lines[i] for i in range(14))
se = pd.Series(L[:13])
df = pd.DataFrame([], columns=('Cat1’,…,’Cat13‘))
df['new_row'] = se.values
Je suis à la recherche d'une trame de données de base (cas x 13) avec « Cat1 », ..., « CAT13 » sous forme de colonnes et instances en tant que lignes.
Cat1 Cat2 ... Cat13
text text text
text text text
...
Y at-il une solution facile à ce problème ou même un autre paquet pour charger un tel fichier?
modifier: Je ne savais pas vraiment ce que je cherchais. Enfin a été en mesure de résoudre ce problème en utilisant itertools.groupby, qui a été mentionné dans this thread.
import itertools
import codecs
import pandas as pd
def group_separator(line):
return line=='\n'
with codecs.open('file.txt', 'r',encoding='utf-8', errors='ignore') as f:
lines = f.readlines()
cols = ('Cat1',...,'Cat13')
data = []
for (key, group) in itertools.groupby(lines, group_separator):
if key:
next(group).strip()
else:
tem_data = [i.strip() for i in group]
tem_data = filter(lambda l: l != '', tem_data)
tem_data = [i.split(':',1) for i in tem_data]
tem_data = [i[1].strip() for i in tem_data]
if len(tem_data) == 13:
data.append(tem_data)
df = pd.DataFrame(data, columns=cols)
Pouvez-vous s'il vous plaît modifier vos données d'exemple pour montrer certains cas, complet et les résultats escomptés? – zipa
Et d'être plus idiomatique. – GiantsLoveDeathMetal
@tsc vérifier ma réponse ci-dessous – MedAli