Suppression de la colonne d'index dans les pandas lors de la lecture d'un csv

128

J'ai le code suivant qui importe un fichier CSV. Il y a 3 colonnes et je veux définir les deux premières d'entre elles sur des variables. Lorsque je règle la deuxième colonne sur la variable «efficacité», la colonne d'index est également collée. Comment puis-je me débarrasser de la colonne d'index?

df = pd.DataFrame.from_csv('Efficiency_Data.csv', header=0, parse_dates=False)
energy = df.index
efficiency = df.Efficiency
print efficiency

J'ai essayé d'utiliser

del df['index']

après avoir mis

energy = df.index

que j'ai trouvé dans un autre article mais qui aboutit à "KeyError: 'index'"

Bogdan Janiszewski
la source

Réponses:

70

Les DataFrames et Series ont toujours un index. Bien qu'il s'affiche à côté de la ou des colonnes, ce n'est pas une colonne, c'est pourquoi il del df['index']n'a pas fonctionné.

Si vous souhaitez remplacer l'index par de simples nombres séquentiels, utilisez df.reset_index().

Pour comprendre pourquoi l'index est présent et comment il est utilisé, voir par exemple 10 minutes à Pandas .

Dan Allan
la source
1
Merci! J'ai décidé de l'importer d'une manière différente sans utiliser de pandas. Je dois effectuer un peu d'arithmétique sur chacune des colonnes et python n'aimait pas avoir la colonne d'index attachée. Pandas est certainement le moyen le plus simple d'importer des données, mais pas toujours le meilleur que j'ai découvert.
Bogdan Janiszewski
2
Avez-vous essayé d'utiliser Pandas pour faire l'arithmétique?
Jamie Bull le
1
peut-on supprimer le nom de l'index?
Quant au
3
Oui, index.name = None.
Dan Allan le
1
@BogdanJaniszewski, si vous n'avez pas utilisé de pandas, alors pourquoi avez-vous accepté cela comme réponse?
multigoodverse
250

Lors de la lecture vers et depuis votre fichier CSV, incluez l'argument index=False, par exemple:

 df.to_csv(filename, index=False)

et lire depuis le csv

df.read_csv(filename, index=False)  

Cela devrait éviter le problème afin que vous n'ayez pas besoin de le résoudre plus tard.

Steve
la source
8
Merci beaucoup, c'est exactement ce que la question recherche.
Pale Blue Dot
1
"header = False" fonctionne pour supprimer les en-têtes de la même manière
J.Dahlgren
29
devrait être index_col=False.
Vedda
1
L'utilisation df.to_sql("table",cursor,if_exists="append",index=False)corrige également l'erreur sqlitesqlite3.OperationalError: table message has no column named index
Anna
1
@vedda, il semble que ce soit index=Falsepour to_excel()et index_col=Falseavec read_csv()dans les pandas 0.23.4. : - /
matt wilkie
70

df.reset_index(drop=True, inplace=True)

Subhojit Mukherjee
la source
2
C'est en fait ma solution préférée, mais pas une réponse très élaborée. Le manuel lit ceci à propos de l'argument drop: "N'essayez pas d'insérer l'index dans les colonnes de dataframe. Cela réinitialise l'index à l'index entier par défaut." pandas.pydata.org/pandas-docs/stable/generated/…
tommy.carstensen
@ tommy.carstensen Alors, comment éviterais-tu d'obtenir les entiers de l'index en remplacement de l'index précédent? Je pense que c'est une mauvaise compréhension du texte de votre lien. La question ici est de supprimer l'index . Et ceci est atteint ici. Vous obtenez les entiers par défaut, car il n'y a pas de dateframe sans index, mais vous avez supprimé l'index précédent. C'est pourquoi cette réponse devrait être la réponse acceptée, également parce qu'elle utilise la mémoire de manière efficace inplace=True.
Lorenz
13

Vous pouvez définir l'une des colonnes comme index au cas où il s'agirait d'un "id" par exemple. Dans ce cas, la colonne d'index sera remplacée par l'une des colonnes que vous avez choisies.

df.set_index('id', inplace=True)
Natheer Alabsi
la source
3

Si votre problème est le même que le mien, vous souhaitez simplement réinitialiser les en-têtes de colonne de 0 à la taille de la colonne. Faire

df = pd.DataFrame(df.values);

ÉDITER:

Ce n'est pas une bonne idée si vous avez des types de données hétérogènes. Mieux vaut simplement utiliser

df.columns = range(len(df.columns))
Bhanu Pratap Singh
la source
2

vous pouvez spécifier quelle colonne est un index dans votre fichier csv en utilisant le paramètre index_col de la fonction from_csv si cela ne résout pas votre problème, veuillez fournir un exemple de vos données

yemu
la source
2

Une chose que je fais est df=df.reset_index() alorsdf=df.drop(['index'],axis=1)

Lord Varis
la source
Erreur: "étiquettes ['index'] non contenues dans l'axe"
Vasin Yuriy
@VasinYuriy cela signifie que df.reset_index().drop(columns=['yourfirstindex', 'yoursecondindex'])cela fonctionne avec 'index' uniquement dans le cas standard où l'index n'a pas de nom et devient alors une colonne appelée 'index' avec df.reset_index().drop(columns=['index']). Le paramètre ajouté axis=1est la valeur par défaut. Cette méthode n'est pas recommandée, @ SubhojitMukherjee reset_index(inplace=True)fonctionne "en place" et économise ainsi de la mémoire.
Lorenz