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)
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.
"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]
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