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?


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)

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)


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)

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')

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')

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.