6

Mam ten kod, chcę usunąć kolumnie „timestamp” z pliku: u.data ale can't.It pokazuje błąd
„ValueError etykiety: [ „timestamp”] nie zawierał w osi” Jak mogę skorygować„ValueError: Etykiety [«timestamp»] nie zawierał w osi” błędach

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

Prawdopodobny duplikat [ValueError: etykiety \ ['znacznik czasu' \] nie zawarte w osi] (http://stackoverflow.com/questions/37763715/valueerror-labels-timestamp-not-contained-in-axis) – pekapa

Odpowiedz

3

Jednym z największych problemów, z którym się spotykamy i który pozostaje niezauważony, jest to, że w pliku u.data podczas wstawiania nagłówków separacja powinna być dokładnie taka sama jak separacja między wierszami danych. Na przykład, jeśli do oddzielenia krotki używana jest karta, nie powinieneś używać spacji.

W swoim pliku u.data dodaj nagłówki i oddzielaj je dokładnie tak wieloma białymi znakami, jakie były używane między pozycjami w wierszu. PS: Użyj wysublimowanego tekstu, notatnika/notatnika ++ czasami nie działa.

+0

Wow ... to naprawdę rozwiązało problem. Nie mogę uwierzyć, że to było takie proste – avaj

2

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

nie masz nagłówków w pliku, więc sposób można go załadować masz df gdzie nazwy kolumn są pierwszymi wierszami danych. Próbowałeś uzyskać dostęp do colunm timestamp, która nie istnieje.

Twoje u.data nie mają nagłówków w nim

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

więc praca z nazwami kolumn nie będzie możliwe, chyba dodawać nagłówki. Możesz dodać nagłówki do pliku u.data, np. Otworzyłem go w edytorze tekstowym i dodałem wiersz a b c timestamp na górze (wydaje się, że jest to plik rozdzielany tabulatorami, więc zachowaj ostrożność, dodając nagłówek, aby nie używać spacji, w przeciwnym razie łamie format)

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

teraz twoje prace kod i data.columns powraca

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

a reszta śladu kodzie roboczej jest obecnie

(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 

Jeśli nie chcesz, aby dodać nagłówki

Albo można upuścić kolumnę „timestamp” używając To indeks (przypuszczalnie 3), możemy zrobić to przy użyciu df.ix poniżej wybiera wszystkie wiersze, kolumny indeksu 0 do indeksu 2 w ten sposób rezygnację z kolumny o indeksie 3

data.ix[:, 0:2] 
0

by to zrobić w ten sposób:

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

Kontrola:

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

Tak, nie trzeba go ładować, jeśli nigdy go nie użyjemy – bakkal

+0

@bakkal, całkowicie się z tobą zgadzam :) – MaxU