6

Tôi có mã này, tôi muốn xóa cột 'dấu thời gian' khỏi tệp: u.data nhưng không thể.Đó hiển thị lỗi
"ValueError : nhãn [ 'timestamp'] không chứa trong trục" làm thế nào tôi có thể sửa chữa nó"Lỗi ValueError: nhãn ['dấu thời gian'] không có trong trục" lỗi

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

Bản sao có thể có của [ValueError: labels \ ['dấu thời gian' \] không được chứa trong trục] (http://stackoverflow.com/questions/37763715/valueerror-labels-timestamp-not-contained-in-axis) – pekapa

Trả lời

3

Một trong những vấn đề lớn nhất mà một khuôn mặt và trải qua không được chú ý là trong tệp u.data trong khi chèn tiêu đề, sự tách biệt phải giống hệt như sự tách biệt giữa một hàng dữ liệu. Ví dụ: nếu một tab được sử dụng để tách một bộ tuple thì bạn không nên sử dụng dấu cách.

Trong tệp u.data của bạn, hãy thêm tiêu đề và tách chúng chính xác với nhiều khoảng trắng được sử dụng giữa các mục của hàng. PS: Sử dụng văn bản tuyệt vời, notepad/notepad ++ đôi khi không hoạt động.

+0

wow..điều đó thực sự đã giải quyết được vấn đề. – avaj

2

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

bạn không cần phải tiêu đề trong tập tin, vì vậy cách bạn nạp nó, bạn có một df nơi tên cột là các hàng đầu tiên của dữ liệu. Bạn đã cố gắng truy cập colunm timestamp không tồn tại.

u.data không có phần đầu của bạn trong nó

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

Vì vậy, làm việc với các tên cột sẽ không thể trừ thêm các tiêu đề. Bạn có thể thêm tiêu đề vào tệp u.data, ví dụ: Tôi đã mở nó trong một trình soạn thảo văn bản và thêm dòng a b c timestamp vào đầu nó (điều này có vẻ là một tệp được phân cách bằng tab, vì vậy hãy cẩn thận khi thêm tiêu đề không sử dụng dấu cách, nếu không nó sẽ phá vỡ định dạng)

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

Bây giờ công trình mã của bạn và data.columns lợi nhuận

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

và phần còn lại của các dấu vết của mã làm việc của bạn bây giờ là

(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 

Nếu bạn không muốn thêm tiêu đề

Hoặc bạn có thể thả cột 'timestamp' sử dụng nó của chỉ số (có lẽ 3), chúng ta có thể làm điều này bằng df.ix dưới nó chọn tất cả các hàng, cột chỉ số từ 0 đến chỉ số 2 , do đó thả các cột với chỉ số 3

data.ix[:, 0:2] 
0

tôi sẽ làm điều đó theo cách này:

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

Kiểm tra:

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

Yeah không cần phải tải nó nếu chúng ta sẽ không bao giờ sử dụng nó – bakkal

+0

@ bakkal, hoàn toàn đồng ý với bạn :) – MaxU

Các vấn đề liên quan