6

ho questo codice, voglio rimuovere la colonna 'timestamp' dal file: u.data ma can't.It mostra l'errore
"ValueError : etichette [ 'timestamp'] non contenuto in asse" Come posso correggerlo"ValueError: etichette [ 'timestamp'] non contenute in asse" errore

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

Possibile duplicato di [ValueError: labels \ ['timestamp' \] non contenuto nell'asse] (http://stackoverflow.com/questions/37763715/valueerror-labels-timestamp-not-contained-in-axis) – pekapa

risposta

3

Uno dei maggiori problemi che uno affronta e che viene ignorato è che nel file u.data durante l'inserimento delle intestazioni la separazione dovrebbe essere esattamente la stessa della separazione tra una riga di dati. Ad esempio, se una scheda viene utilizzata per separare una tupla, non è necessario utilizzare gli spazi.

Nel file u.data aggiungi le intestazioni e separale esattamente con tutti gli spazi bianchi usati tra gli elementi di una riga. PS: Usa testo sublime, notepad/notepad ++ a volte non funziona.

+0

wow..quello che ha veramente risolto il problema.può credere che fosse così semplice – avaj

2

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

non avete le intestazioni nel file, in modo che il modo in cui si è caricato che hai un df dove la i nomi delle colonne sono le prime file dei dati. Hai provato ad accedere a colunm timestamp che non esiste.

vostri u.data non ha intestazioni in esso

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

Così lavorano con i nomi delle colonne non sta andando essere possibile a meno che aggiungere le intestazioni. Puoi aggiungere le intestazioni al file u.data, ad es. L'ho aperto in un editor di testo e ho aggiunto la riga a b c timestamp (sembra un file separato da tabulazioni, quindi fai attenzione quando aggiungi l'intestazione per non utilizzare gli spazi, altrimenti interrompe il formato)

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

ora le tue opere di codice e data.columns rendimenti

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

e il resto della traccia del codice di lavoro è ora

(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 

Se non si desidera aggiungere intestazioni

Oppure si può eliminare la colonna 'timestamp' utilizzo di indice (presumibilmente 3), siamo in grado di farlo usando df.ix sotto di esso seleziona tutte le righe, colonne di indice da 0 a indice 2 , lasciando cadere in tal modo la colonna con indice 3

data.ix[:, 0:2] 
0

vorrei fare in questo modo:

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

check:

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

Sì, non c'è bisogno di caricarlo se non lo useremo mai – bakkal

+0

@bakkal, totalmente d'accordo con te :) – MaxU