2017-04-04 3 views
1

J'ai un problème avec les fichiers CSV que j'essaie d'importer dans les pandas. La structure du fichier est la suivante:Modifier le fichier CSV avant de l'importer aux pandas

  • le premier caractère du fichier est un guillemet simple;
  • le dernier caractère du fichier est un guillemet simple;
  • chaque ligne du début CSV avec des guillemets doubles, se terminent par un guillemet suivi de \ n

J'ai des problèmes d'importation avec pandas.read_csv. Idéalement, j'aimerais que les pandas ignorent simplement les guillemets simples et doubles lors de l'importation (en ne les prenant pas en compte pour la structure de la trame de données, et en ne les important pas en tant que caractères).

Je ne sais pas vraiment si je devrais manipuler le fichier CSV avant d'utiliser pandas.read_csv, ou si j'ai l'option de simplement ignorer ces caractères.

+0

Inclure fichier exemple et le code que vous avez essayé – Shijo

Répondre

1

paramètre Utiliser 'citant' et passer la valeur 3 à read_csv. Une fois que vous avez créé un dataframe, vous devez vous occuper des guillemets dans les données et les en-têtes.

import pandas as pd 


df=pd.read_csv('check.txt',doublequote=True,delimiter=',',quoting=3) 
df=df.replace({'"': '','\'':''}, regex=True) 
df.columns = ['Id1','StartTime','start_lat','start_long','StartGeohash'] 

print df 

Exemple de fichier

'Id1,StartTime,start_lat,start_long,StartGeohash 
"113,2016-11-01 10:50:28.063,-33.139507,-100.226715,9vbsx2" 
"113,2016-11-02 10:49:24.063,-33.139507,-100.226715,9vbsx2" 
"115,2016-11-03 10:55:20.063,-36.197660,-101.186050,9y2jcm"' 

sortie

Id1    StartTime start_lat start_long StartGeohash 
0 113 2016-11-01 10:50:28.063 -33.139507 -100.226715  9vbsx2 
1 113 2016-11-02 10:49:24.063 -33.139507 -100.226715  9vbsx2 
2 115 2016-11-03 10:55:20.063 -36.197660 -101.186050  9y2jcm 
+0

Merci de votre réponse. delimiter = ',', quoting = 3 font l'affaire pour importer le fichier mais je dois encore gérer les guillemets doubles sur les valeurs situées dans les première et dernière colonnes. – clowny

+0

Ajout du code pour prendre soin des citations dans les données – Shijo

+0

Merci ça marche très bien! – clowny

0

Le premier argument des méthodes pd.read_csv est un nom de fichier ou un flux.

Vous pouvez lire le fichier manuellement et manipuler le flux avant de le transmettre aux pandas.

sio = StringIO("id,category,value\n1,beer,2.40\n2,wine,6.40\n3,$$$Theawsomestuff$$$###,166.00" 
pd.read_csv(sio) 
    id     category value 
0 1      beer 2.4 
1 2      wine 6.4 
2 3 $$$Theawsomestuff$$$### 166.0 

Ainsi vous pouvez StringIO le sous-classement de modifier le comportement de la méthode read

class StreamChanger(StringIO): 
    def read(self, **kwargs): 
     data = super().read(**kwargs) 
     data = data.replace("$", "") 
     data = data.replace("#", "") 
     return data 

sio = StreamChanger("id,category,value\n1,beer,2.40\n2,wine,6.40\n3,$$$Theawsomestuff$$$###,166.00") 
pd.read_csv(sio) 
    id     category value 
0 1      beer 2.4 
1 2      wine 6.4 
2 3   Theawsomestuff 166.0