Comment éviter que Python / Pandas ne crée un index dans un csv enregistré?

407

J'essaie d'enregistrer un fichier csv dans un dossier après avoir apporté quelques modifications au fichier.

Chaque fois que j'utilise pd.to_csv('C:/Path of file.csv')le fichier csv a une colonne séparée d'index. Je veux éviter d'imprimer l'index en csv.

J'ai essayé:

pd.read_csv('C:/Path to file to edit.csv', index_col = False)

Et pour enregistrer le fichier ...

pd.to_csv('C:/Path to save edited file.csv', index_col = False)

Cependant, j'ai toujours obtenu la colonne d'index indésirable. Comment puis-je éviter cela lorsque j'enregistre mes fichiers?

Alexis
la source
59
essayez index=Falseau lieu deindex_col
Jeff
Pouvons-nous l'utiliser également dans MS Excel?
Nabih Ibrahim Bawazir du
Oui, vous pouvezpd.to_excel(r'file.xlsx', index = False)
bfree67
index_colfonctionne read_html()aussi pour .
caram

Réponses:

606

Utilisez index=False.

df.to_csv('your.csv', index=False)
Probablement rgbkrk
la source
Solution d'une facilité embarrassante, j'ai honte d'atteindre ce 6 ans plus tard.
peluzza
89

Il existe deux façons de gérer la situation où nous ne voulons pas que l'index soit stocké dans le fichier csv.

  1. Comme d'autres l'ont indiqué, vous pouvez utiliser index = False lors de l'enregistrement de votre
    trame de données dans un fichier csv.

    df.to_csv('file_name.csv',index=False)

  2. Ou vous pouvez enregistrer votre dataframe tel qu'il est avec un index, et pendant la lecture, déposez simplement la colonne sans nom 0 contenant votre index précédent.

    df.to_csv(' file_name.csv ')
    df_new = pd.read_csv('file_name.csv').drop(['unnamed 0'],axis=1)

blitu12345
la source
1
"et pendant la lecture, déposez simplement la colonne 0 sans nom contenant votre index précédent", une meilleure façon de procéder est de spécifier pd.read_csv(..., index_col=[0]et d'éviter l'appel supplémentaire "drop".
cs95
30

Si vous ne voulez pas d'index, lisez le fichier en utilisant:

import pandas as pd
df = pd.read_csv('file.csv', index_col=0)

enregistrez-le en utilisant

df.to_csv('file.csv', index=False)
amalik2205
la source
2
Je ne peux pas croire que personne n'ait remarqué l'erreur. Pour enregistrer en csv, ce seraitdf.to_csv('file.csv', index=False)
MEdwin
1
Lol personne ne fait attention. Merci.
amalik2205
22

Comme d'autres l'ont indiqué, si vous ne souhaitez pas enregistrer la colonne d'index en premier lieu, vous pouvez utiliser df.to_csv('processed.csv', index=False)

Cependant, puisque les données que vous utiliserez habituellement ont elles-mêmes une sorte d'index, disons une colonne «horodatage», je garderais l'index et chargerais les données en l'utilisant.

Donc, pour enregistrer les données indexées, définissez d'abord leur index, puis enregistrez le DataFrame:

df.set_index('timestamp')
df.to_csv('processed.csv')

Ensuite, vous pouvez soit lire les données avec l'index:

pd.read_csv('processed.csv', index_col='timestamp')

ou lisez les données, puis définissez l'index:

pd.read_csv('filename.csv')
pd.set_index('column_name')
Lucas P.
la source
Si j'ai défini l'index_col puis enregistré, j'avais toujours une colonne numérique sans nom dans le csv. (Python2)
smiller
14

Une autre solution si vous souhaitez conserver cette colonne comme index.

pd.read_csv('filename.csv', index_col='Unnamed: 0')
khaled salah
la source
1
Exactement ce que je cherchais, merci. Cela aide en quelque sorte à traduire le concept de clé primaire de manière transparente, même lors de l'utilisation de csv
Tobbey
7

Si vous voulez un bon format, la prochaine déclaration est la meilleure:

dataframe_prediction.to_csv('filename.csv', sep=',', encoding='utf-8', index=False)

Dans ce cas, vous avez un fichier csv avec ',' comme séparé entre les colonnes et le format utf-8. De plus, l'index numérique n'apparaîtra pas.

Iván Rodríguez
la source