web-dev-qa-db-fra.com

Erreur "ValueError: étiquettes ['horodatage'] non contenues dans l'axe"

J'ai ce code, je veux supprimer la colonne 'horodatage' du fichier: u.data mais je ne peux pas. Il affiche l'erreur
"ValueError: étiquettes ['horodatage'] non contenues dans l'axe" Comment puis-je le corriger?

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)
6
avaj

L’un des plus gros problèmes auquel 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 identique à la séparation entre une rangée 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 u.data, ajoutez des en-têtes et séparez-les avec autant d'espaces que ceux utilisés dans les lignes . PS: utilisez du texte sublime, notepad/notepad ++ ne fonctionnant parfois pas.

4
Aditya

"ValueError: les étiquettes ['timestamp'] non contenues dans l'axe"

Vous n'avez pas d'en-tête dans le fichier, donc la manière dont vous l'avez chargé donne une df où les noms de colonnes sont les premières lignes des données. Vous avez essayé d'accéder à la colonne timestamp qui n'existe pas.

Votre u.data ne contient pas d'en-tête

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

Il ne sera donc pas possible de travailler avec des noms de colonnes sans ajouter les en-têtes. Vous pouvez ajouter les en-têtes au fichier u.data, par exemple. Je l'ai ouvert dans un éditeur de texte et ajouté la ligne a b c timestamp en haut de celui-ci (il semble s'agir d'un fichier séparé par des tabulations, soyez donc prudent lorsque vous ajoutez l'en-tête afin de ne pas utiliser d'espaces, sinon le format sera cassé)

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

Maintenant, votre code fonctionne et data.columns renvoie 

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 d'en-têtes

Ou vous pouvez supprimer la 'horodatage' de la colonne en utilisant son index (vraisemblablement 3). Pour ce faire, utilisez df.ix. En dessous, il sélectionne toutes les lignes, les index des colonnes 0 à 2, supprimant ainsi la colonne d'index 3

data.ix[:, 0:2]
2
bakkal

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
MaxU