2017-05-20 1 views
2

J'ai un fichier texte. Chaque ligne du fichier ressemble à ceci, mais il a une longueur différente:Comment créer une trame de données à partir d'un fichier texte

negative فينو اهبل ابن اهبل 
positive فينو اهبل ابن اهبل 
neutral فينو اهبل ابن اهبل 

quand je l'utilise pandas.read_table il lit dans une colonne, j'essayé de convertir le fichier dans Excel ou CSV, mais convertit encore en une seule colonne Je veux que ce soit un cadre de données à deux colonnes où le negative dans sa propre colonne et le reste est dans une autre colonne.

+0

est-il toujours 'negative', ou êtes-vous juste essayer de casser le premier espace? –

+0

Jetez un oeil à 'pd.read_fwf' –

+0

non 3 valeurs positives, négatives, neutres –

Répondre

2

d'abord lire le fichier entier dans une trame de données avec une seule colonne:

df = pd.read_csv('/path/to/file.txt', sep='~', header=None) 

rendements:

In [50]: df 
Out[50]: 
          0 
0 negative aaa bbb ccc ddd 
1   positive qqq vvv 

maintenant nous pouvons l'analyser comme ceci:

In [51]: df[['col1','col2']] = df.pop(0).str.extract(r'^([^\s]+)\s*(.*?)$', expand=True) 

In [52]: df 
Out[52]: 
     col1    col2 
0 negative aaa bbb ccc ddd 
1 positive   qqq vvv 

ou :

In [65]: df[['col1','col2']] = df.pop(0).str.split(n=1, expand=True) 

In [66]: df 
Out[66]: 
     col1    col2 
0 negative aaa bbb ccc ddd 
1 positive   qqq vvv 
2

Vous pouvez construire votre propre analyseur comme:

code:

def parse_my_file(filename): 
    with open(filename) as f: 
     for line in f: 
      yield line.strip().split(' ', 1) 

Code d'essai:

df = pd.DataFrame(parse_my_file('file1')) 
print(df) 

Résultats:

  0     1 
0 negative فينو اهبل ابن اهبل 
1 neutral فينو اهبل ابن اهبل 
2 positive فينو اهبل ابن اهبل 
+1

Approche très intéressante! – MaxU

+0

Merci beaucoup, parfait! J'ai essayé de diviser avant, mais n'a jamais utilisé le rendement donc j'ai eu plusieurs erreurs –

1

Entrée:

from io import StringIO 

table = """ 
negative فينو اهبل ابن اهبل 
positive فينو اهبل ابن اهبل 
neutral فينو اهبل ابن اهبل 
negative فينو اهبل ابن اهبل 
negative فينو اهبل ابن اهبل 
negative فينو اهبل ابن اهبل 
""" 

fichier Lire:

df_in = pd.read_fwf(StringIO(table),widths=[8,1000]) 
print(df_in) 

Sortie:

Unnamed: 0   Unnamed: 1 
0 negative فينو اهبل ابن اهبل 
1 positive فينو اهبل ابن اهبل 
2 neutral فينو اهبل ابن اهبل 
3 negative فينو اهبل ابن اهبل 
4 negative فينو اهبل ابن اهبل 
5 negative فينو اهبل ابن اهبل