2017-07-02 3 views
1

のための 'スライス':TypeError例外:非ハッシュタイプ:私は、このように作成パンダのデータ構造、持っているパンダ

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' 

間違っている可能性がどのような任意のアイデアを?

+1

'test_inputs [100:200]'または 'test_inputs.loc [100:200、:]'? – MaxU

答えて

2

あり、より可能な解決策であるが、出力が同じではない:

locラベルによって選択するが、上限はdocs - select by positionsを除外している間に機能せずilocとスライスは、開始境界は、を含まれています:

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

パンダでのインデックス作成は、リストの索引付けのように見えますが、実際には混乱します。位置によってインデックス付けされているあなたは、列の選択を使用しない場合

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

は、そして、あなたはそれを

print(test_inputs.iloc[100:200]) 

P.S.を省略することができ、.ilocを使用する必要があります.locを使用すると、行番号ではなく、行インデックスで、インデックス値100と200を検索しようとするので、必要なものではなく、間に行を与えます。 .iloc.locを作成しただけで同じ結果が得られる場合がありますが、この場合は.locを使用することは非常に悪い習慣です。何らかの理由でインデックスが変更された場合に問題を理解することが難しくなります。いくつかの行のサブセットを選択すると、その時点から行番号とインデックスは同じになりません)。

関連する問題