J'ai un csv qui contient seulement 1 colonne de noms de domaine allant d'environ 300 à 1500 lignes, ressemblant à ce qui suit:

google.com
abc.net
yahoo.com
cnn.com
twitter.com

Tout ce que je dois faire est d'ajouter un en-tête de colonne de "domaine" pour que mon csv ressemble à:

domain
google.com
abc.net
yahoo.com
cnn.com
twitter.com

J'ai tenté ce qui suit en utilisant des pandas:

from pandas import read_csv
x = read_csv('domains.csv')
x.columns = ['domain']
x.to_csv('out.csv')

Cela se traduit par un csv avec l'en-tête de colonne ajouté, mais il a également ajouté une colonne supplémentaire avec les numéros de ligne, ce que je ne veux pas ... que fais-je de mal?

    domain
0   google.com
1   abc.net
2   yahoo.com
3   cnn.com
4   twitter.com
3
P.J. 9 août 2016 à 15:40

4 réponses

Meilleure réponse

Vous devez définir index=False lors de l'écriture de to_csv pour supprimer la colonne supplémentaire:

x.to_csv('out.csv',index=False)
2
shivsn 9 août 2016 à 12:49

Vous pouvez utiliser le paramètre header dans to_csv car vous n'avez qu'une seule colonne dans votre trame de données.

df = pd.read_csv(data, header=None)
df.to_csv('out.csv', header=['domain'], index=False)
1
Nickil Maveli 9 août 2016 à 12:58

Si tout ce que vous faites est d'ajouter une ligne, vous n'avez pas vraiment besoin de pandas pour ce faire. Voici un exemple utilisant les modules d'écriture de fichiers python normaux:

with open('domains.csv', 'rb') as csvfile:
    rows = [r for r in csvfile]
    rows = ['domain'] + rows

with open('domains.csv', 'wb') as csvfile:
    for row in rows:
        csvfile.write(row + '\n')
1
ClydeTheGhost 9 août 2016 à 12:45

Vous pouvez ajouter le paramètre names à read_csv et index=False à {{ X3}}:

x = read_csv('domains.csv', names=['domain'])

Échantillon:

import pandas as pd
import io

temp=u"""google.com
abc.net
yahoo.com
cnn.com
twitter.com"""
#after testing replace io.StringIO(temp) to filename
x = pd.read_csv(io.StringIO(temp), names=['domain'])
print (x)
        domain
0   google.com
1      abc.net
2    yahoo.com
3      cnn.com
4  twitter.com

#need remove index
x.to_csv('filename',index=False)
0
jezrael 9 août 2016 à 12:46