web-dev-qa-db-fra.com

importer du texte dans pandas avec plusieurs délimiteurs

J'ai quelques données qui ressemblent à ceci:

c stuff
c more header
c begin data         
 1 1:.5
 1 2:6.5
 1 3:5.3

Je souhaite l'importer dans un bloc de données à 3 colonnes, avec des colonnes par ex.

a , b, c
1,  1, 0.5
etc

J'ai essayé de lire les données sous forme de 2 colonnes réparties sur ':', puis de diviser la première colonne sur ''. Mais je trouve ça ennuyeux. Existe-t-il un meilleur moyen de le trier directement à l'importation?

actuellement:

data1 = pd.read_csv(file_loc, skiprows = 3, delimiter = ':', names = ['AB', 'C'])
data2 = pd.DataFrame(data1.AB.str.split(' ',1).tolist(), names = ['A','B'])

Cependant, cela est encore compliqué par le fait que mes données ont un espace de premier plan ...

Je pense que cela devrait être une tâche simple, mais actuellement, je pense à le lire ligne par ligne et à utiliser certains find replace pour nettoyer les données avant de les importer.

16
CastleH

Une façon pourrait être d'utiliser les séparateurs d'expression régulière autorisés par le moteur python. Par exemple:

>>> !cat castle.dat
c stuff
c more header
c begin data         
 1 1:.5
 1 2:6.5
 1 3:5.3
>>> df = pd.read_csv('castle.dat', skiprows=3, names=['a', 'b', 'c'], 
                     sep=' |:', engine='python')
>>> df
   a  b    c
0  1  1  0.5
1  1  2  6.5
2  1  3  5.3
28
DSM