6

Je possède ce code, je veux supprimer la colonne « timestamp » du fichier: u.data mais can't.It montre l'erreur
« ValueError : les étiquettes [ « horodatage »] qui ne figure pas dans l'axe » Comment puis-je corriger« ValueError: étiquettes [ « horodatage »] ne figure pas dans l'axe » erreur

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
plt.rc("font", size=14) 
from sklearn.linear_model import LinearRegression 
from sklearn.linear_model import Ridge 
from sklearn.cross_validation import KFold 
from sklearn.cross_validation import train_test_split 



data = pd.read_table('u.data') 
data.columns=['userID', 'itemID','rating', 'timestamp'] 
data.drop('timestamp', axis=1) 


N = len(data) 
print data.shape 
print list(data.columns) 
print data.head(10) 
+0

Copie possible de [ValueError: labels \ ['timestamp' \] non contenu dans l'axe] (http://stackoverflow.com/questions/37763715/valueerror-labels-timestamp-not-contained-in-axis) – pekapa

Répondre

3

L'un des plus gros problèmes auxquels on est confronté et qui passe inaperçu est que dans le fichier u.data lors de l'insertion des en-têtes, la séparation doit être exactement la même que la séparation entre une ligne de données. Par exemple, si un onglet est utilisé pour séparer un tuple, vous ne devez pas utiliser d'espaces.

Dans votre fichier .data, ajoutez des en-têtes et séparez-les exactement avec autant d'espaces que ceux utilisés entre les éléments d'une ligne. PS: Utiliser du texte sublime, notepad/notepad ++ ne fonctionne pas parfois.

+0

wow .. qui a vraiment résolu le problème. Je ne crois pas que c'était si simple – avaj

2

"ValueError: labels ['timestamp'] not contained in axis"

vous n'avez pas les en-têtes dans le fichier, alors la façon dont vous l'avez chargé-vous un df où la Les noms de colonnes sont les premières lignes des données. Vous avez essayé d'accéder à colunm timestamp qui n'existe pas.

Votre u.data ne dispose pas d'en-têtes dans ce

$head u.data     
196 242 3 881250949 
186 302 3 891717742 

travail Donc, avec les noms de colonnes ne va pas être possible, à moins d'ajouter les en-têtes. Vous pouvez ajouter les en-têtes au fichier u.data, par ex. Je l'ai ouvert dans un éditeur de texte et ajouté la ligne a b c timestamp en haut de celui-ci (cela semble être un fichier séparé par des tabulations, donc attention à ne pas utiliser d'espaces, sinon il casse le format)

$head u.data     
a b c timestamp 
196 242 3 881250949 
186 302 3 891717742 

maintenant votre code fonctionne et data.columns retours

Index([u'a', u'b', u'c', u'timestamp'], dtype='object') 

et le reste de la trace de votre code de travail est maintenant

(100000, 4) # the shape 
['a', 'b', 'c', 'timestamp'] # the columns 
    a b c timestamp # the df 
0 196 242 3 881250949 
1 186 302 3 891717742 
2 22 377 1 878887116 
3 244 51 2 880606923 
4 166 346 1 886397596 
5 298 474 4 884182806 
6 115 265 2 881171488 
7 253 465 5 891628467 
8 305 451 3 886324817 
9 6 86 3 883603013 

Si vous ne voulez pas ajouter des en-têtes

Ou vous pouvez supprimer la colonne « timestamp » utiliser son index (probablement 3), nous pouvons le faire en utilisant df.ix dessous permet de sélectionner toutes les lignes, colonnes index 0 à l'index 2 , laissant tomber ainsi la colonne avec l'index 3

data.ix[:, 0:2] 
0

je le ferais de cette façon:

data = pd.read_table('u.data', header=None, 
        names=['userID', 'itemID','rating', 'timestamp'], 
        usecols=['userID', 'itemID','rating'] 
) 

Vérifier:

In [589]: data.head() 
Out[589]: 
    userID itemID rating 
0  196  242  3 
1  186  302  3 
2  22  377  1 
3  244  51  2 
4  166  346  1 
+0

Ouais pas besoin de le charger si nous n'allons jamais l'utiliser – bakkal

+0

@bakkal, totalement d'accord avec vous :) – MaxU