TypeError:不可用类型:panda为'panda'

时间:2017-07-02 12:52:22

标签: python pandas

我有一个熊猫数据结构,我这样创建:

test_inputs = pd.read_csv("../input/test.csv", delimiter=',')

它的形状

print(test_inputs.shape)

是这个

(28000, 784)

我想打印其行的子集,如下所示:

print(test_inputs[100:200, :])
print(test_inputs[100:200, :].shape)

然而,我得到了:

TypeError: unhashable type: 'slice'

知道可能出现什么问题吗?

4 个答案:

答案 0 :(得分:8)

大熊猫中的索引真的令人困惑,因为它看起来像列表索引,但事实并非如此。您需要使用.iloc,它按位置索引

print(test_inputs.iloc[100:200, :])

如果你不使用列选择,你可以省略它

print(test_inputs.iloc[100:200])

P.S。使用.loc(或只是[])不是你想要的,因为它看起来不是行号,而是行索引(可以填充任何东西,甚至不是数字,甚至不是独特)。 .loc中的范围将找到索引值为100和200的行,并返回它们之间的行。如果您刚刚创建了DataFrame .iloc.loc可能会给出相同的结果,但在这种情况下使用.loc是一种非常糟糕的做法,因为它会导致您难以理解的问题索引会因某种原因而改变(例如,您将选择某些行的子集,从那时起,行号和索引将不相同)。

答案 1 :(得分:5)

有更多可能的解决方案,但输出不相同:

loc按标签选择,但是iloc并且没有函数切片,起始边界是包含,而上限是排除docs - select by positions

test_inputs = pd.DataFrame(np.random.randint(10, size=(28, 7)))

print(test_inputs.loc[10:20])
    0  1  2  3  4  5  6
10  3  2  0  6  6  0  0
11  5  0  2  4  1  5  2
12  5  3  5  4  1  3  5
13  9  5  6  6  5  0  1
14  7  0  7  4  2  2  5
15  2  4  3  3  7  2  3
16  8  9  6  0  5  3  4
17  1  1  0  7  2  7  7
18  1  2  2  3  5  8  7
19  5  1  1  0  1  8  9
20  3  6  7  3  9  7  1
print(test_inputs.iloc[10:20])
    0  1  2  3  4  5  6
10  3  2  0  6  6  0  0
11  5  0  2  4  1  5  2
12  5  3  5  4  1  3  5
13  9  5  6  6  5  0  1
14  7  0  7  4  2  2  5
15  2  4  3  3  7  2  3
16  8  9  6  0  5  3  4
17  1  1  0  7  2  7  7
18  1  2  2  3  5  8  7
19  5  1  1  0  1  8  9

print(test_inputs[10:20])
    0  1  2  3  4  5  6
10  3  2  0  6  6  0  0
11  5  0  2  4  1  5  2
12  5  3  5  4  1  3  5
13  9  5  6  6  5  0  1
14  7  0  7  4  2  2  5
15  2  4  3  3  7  2  3
16  8  9  6  0  5  3  4
17  1  1  0  7  2  7  7
18  1  2  2  3  5  8  7
19  5  1  1  0  1  8  9

答案 2 :(得分:0)

我面临着同样的问题。即使上述解决方案也无法解决。大熊猫遇到了一些问题,我所做的是将数组更改为numpy数组,然后没有问题。

UIControl

答案 3 :(得分:0)

print(test_inputs.values[100:200, :])
print(test_inputs.values[100:200, :].shape)

此代码也对我有用。