“ValueError:labels ['timestamp']未包含在轴”错误中

时间:2016-06-11 16:27:27

标签: python pandas machine-learning recommendation-engine data-science

我有这段代码,我想删除文件中的'timestamp'列:u.data但不能。它显示错误
“ValueError:标签['timestamp']未包含在轴中” 我该如何纠正呢

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)

3 个答案:

答案 0 :(得分:4)

一个人面临的最大问题之一就是未被注意到的问题是,在插入标题时,u.data文件中的分隔应该与一行数据之间的分隔完全相同。例如,如果使用选项卡来分隔元组,则不应使用空格。

在您的u.data文件中添加标题并使用在项目之间使用的空格分隔它们。行。 PS:使用sublime文本,notepad / notepad ++有时不起作用。

答案 1 :(得分:2)

  

" ValueError:标签['时间戳']未包含在轴"

您在文件中没有标题,因此您加载它的方式是df,其中列名是数据的第一行。您尝试访问不存在的colunm timestamp

您的u.data中没有标题

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

因此,除非添加标题,否则无法使用列名。您可以将标头添加到文件u.data,例如我在文本编辑器中打开它并在其顶部添加了行a b c timestamp(这似乎是一个以制表符分隔的文件,因此在添加标题时要小心,不要使用空格,否则会破坏格式)

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

现在您的代码正常运行,data.columns返回

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

现在,您工作代码的其余部分是

(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

如果您不想添加标题

或者您可以删除列'时间戳'使用它的索引(可能是3),我们可以使用下面的df.ix选择所有行,将索引0到索引2的列,从而删除索引为3的列

data.ix[:, 0:2]

答案 2 :(得分:0)

我会这样做:

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

检查:

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