TypeError: unhashable type: 'slice' for pandas

前端 未结 4 2136
甜味超标
甜味超标 2021-02-19 14:27

I have a pandas datastructure, which I create like this:

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

Its shape

         


        
相关标签:
4条回答
  • 2021-02-19 14:57

    There is more possible solutions, but output is not same:

    loc selects by labels, but iloc and slicing without function, the start bounds is included, while the upper bound is excluded, 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
    
    0 讨论(0)
  • 2021-02-19 15:00

    I was facing the same problem. Even the above solutions couldn't fix it. It was some problem with pandas, What I did was I changed the array into a numpy array and then there was no problem.

    import pandas as pd
    import numpy as np
    test_inputs = pd.read_csv("../input/test.csv", delimiter=',')
    test_inputs = np.asarray(test_inputs)
    
    0 讨论(0)
  • 2021-02-19 15:01
    print(test_inputs.values[100:200, :])
    print(test_inputs.values[100:200, :].shape)
    

    This code is also working for me.

    0 讨论(0)
  • 2021-02-19 15:19

    Indexing in pandas is really confusing, as it looks like list indexing but it is not. You need to use .iloc, which is indexing by position

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

    And if you don't use column selection you can omit it

    print(test_inputs.iloc[100:200])
    

    P.S. Using .loc (or just []) is not what you want, as it would look not for the row number, but for the row index (which can be filled we anything, not even numbers, not even unique). Ranges in .loc will find rows with index value 100 and 200, and return the lines between. If you just created the DataFrame .iloc and .loc may give the same result, but using .loc in this case is a very bad practice as it will lead you to difficult to understand problem when the index will change for some reason (for example you'll select some subset of rows, and from that moment the row number and index will not be the same).

    0 讨论(0)
提交回复
热议问题