web-dev-qa-db-fra.com

Comment supprimer une colonne d'un dataframe avec des pandas?

Je lis mes données

import pandas as pd
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df

et obtenir:

          id    text
0    361.273    text1...
1    374.350    text2...
2    374.350    text3...

Comment puis-je supprimer la colonne id du cadre de données ci-dessus?. J'ai essayé ce qui suit:

import pandas as pd
df = pd.read_csv('/path/file.tsv', header=0, delimiter='\t')
print df.drop('id', 1)

Mais il soulève cette exception:

ValueError: labels ['id'] not contained in axis
42
newWithPython

pour supprimer réellement la colonne

del df['id'] Ou df.drop('id', 1) aurait dû fonctionner si la colonne transmise correspond exactement

Cependant, si vous n'avez pas besoin de supprimer la colonne, vous pouvez simplement sélectionner la colonne d'intérêt de la manière suivante:

In [54]:

df['text']
Out[54]:
0    text1
1    text2
2    textn
Name: text, dtype: object

Si vous ne l’avez jamais voulu au départ, vous passez une liste de colonnes à read_csv En tant que paramètre usecols:

In [53]:
import io
temp="""id    text
363.327    text1
366.356    text2
37782    textn"""
df = pd.read_csv(io.StringIO(temp), delimiter='\s+', usecols=['text'])
df
Out[53]:
    text
0  text1
1  text2
2  textn

En ce qui concerne votre erreur, c’est que 'id' Ne figure pas dans vos colonnes, qu’il est orthographié différemment ou qu’il contient des espaces. Pour vérifier cela, regardez la sortie de print(df.columns.tolist()), ceci affichera une liste des colonnes et montrera si vous avez des espaces de début/fin.

15
EdChum

df.drop(colname, axis=1) (ou del df[colname]) est la méthode correcte à utiliser pour supprimer une colonne.

Si un ValueError est levé, cela signifie que le nom de la colonne n’est pas exactement ce que vous pensez.

Vérifier df.columns pour voir ce que Pandas pense être les noms des colonnes).

53
unutbu

Le meilleur moyen de supprimer une colonne dans pandas est d'utiliser drop :

df = df.drop('column_name', axis=1)

1 est le nombre axe (0 pour les lignes et 1 pour les colonnes.)

Pour supprimer la colonne sans avoir à réaffecter df, vous pouvez procéder comme suit:

df.drop('column_name', axis=1, inplace=True)

Enfin, pour déposer par colonne nombre au lieu de colonne étiquette , essayez cette. Pour supprimer, par exemple les 1ère, 2ème et 4ème colonnes:

df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based pd.Index 


Exceptions:

Si un numéro ou une étiquette de colonne incorrect est demandé, une erreur sera générée. Pour vérifier le nombre de colonnes, utilisez df.shape[1] Ou len(df.columns.values) et pour vérifier les étiquettes de colonne, utilisez df.columns.values.

Une exception serait soulevée La réponse était basée sur @ (Londres) réponse et laissée ici pour aider les futurs visiteurs de cette page.

33
borgr