【问题标题】:"ValueError: labels ['timestamp'] not contained in axis" error“ValueError:标签 ['timestamp'] 不包含在轴中”错误
【发布时间】:2016-10-12 11:19:21
【问题描述】:

我有此代码,我想从文件中删除“时间戳”列: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)

【问题讨论】:

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


【解决方案1】:

“ValueError: 标签 ['timestamp'] 不包含在轴中”

文件中没有标题,因此加载它的方式是df,其中列名是数据的第一行。您尝试访问不存在的列 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】:

    我会这样做:

    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
    

    【讨论】:

    • 是的,如果我们永远不会使用它,则无需加载它
    • @bakkal,完全同意你的看法:)
    【解决方案3】:

    一个人面临并且被忽视的最大问题之一是在 u.data 文件中插入标题时的分隔应该与一行数据之间的分隔完全相同。例如,如果使用制表符分隔元组,则不应使用空格。

    在您的 u.data 文件中添加标题并使用与行的项目之间使用的空格一样多的空格将它们完全分开。 PS:使用sublime text,notepad/notepad++有时不工作。

    【讨论】:

    • 哇..这真的解决了问题。不敢相信它是如此简单
    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 2016-07-07
    • 2018-12-17
    • 2017-12-09
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多