我有这段代码,我想删除文件中的'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)
答案 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