“TypeError:'DataFrame'对象是可变的,因此在排序pandas dataframe index时无法进行散列”

时间:2017-03-27 18:48:48

标签: python python-3.x sorting pandas dataframe

我有以下数据框h

In [24]: h.head()
Out[24]: 
                 alpha1  alpha2    gamma1  gamma2       chi2min gender  age
filename                                                                   
F35_HC_532d.dat  0.0000   0.000       NaN    0.00  1.000000e+25      F   35
M48_HC_551d.dat  0.7353   3.943  0.425922    0.15  2.072617e+01      M   48
M24_HC_458d.dat  0.7777   4.754  0.463753    0.15  1.390893e+01      M   24
M48_HC_552d.dat  0.7633   3.672  0.394370    0.15  1.965052e+01      M   48
M40_HC_506d.dat  0.7793   3.271  0.513597    0.20  1.089716e+01      M   40

我正在尝试根据年龄值对数据框索引进行排序:

In [25]: h.sort_index(h.sort_values('age'))

这会引发错误:

TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed

我错过了什么?有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这就是你想要的吗?

In [14]: h
Out[14]:
                 alpha1  alpha2    gamma1  gamma2       chi2min gender  age
filename
F35_HC_532d.dat  0.0000   0.000       NaN    0.00  1.000000e+25      F   35
M48_HC_551d.dat  0.7353   3.943  0.425922    0.15  2.072617e+01      M   48
M24_HC_458d.dat  0.7777   4.754  0.463753    0.15  1.390893e+01      M   24
M48_HC_552d.dat  0.7633   3.672  0.394370    0.15  1.965052e+01      M   48
M40_HC_506d.dat  0.7793   3.271  0.513597    0.20  1.089716e+01      M   40

In [15]: h.sort_values('age')
Out[15]:
                 alpha1  alpha2    gamma1  gamma2       chi2min gender  age
filename
M24_HC_458d.dat  0.7777   4.754  0.463753    0.15  1.390893e+01      M   24
F35_HC_532d.dat  0.0000   0.000       NaN    0.00  1.000000e+25      F   35
M40_HC_506d.dat  0.7793   3.271  0.513597    0.20  1.089716e+01      M   40
M48_HC_551d.dat  0.7353   3.943  0.425922    0.15  2.072617e+01      M   48
M48_HC_552d.dat  0.7633   3.672  0.394370    0.15  1.965052e+01      M   48

答案 1 :(得分:1)

我认为您的索引是文件名。也许你可以尝试类似的东西:

h.sort_values(by='age')

但它也不会那么有意义,因为它不会改变秩序。或者你可以尝试:

h.reindex([range(some_number)])

然后:

str=inputbox("Enter the string: ")
str1=len(str)
a=Left(str,1)
for i=1 to str1
str2=Left(str,i)
if len(str2)>1 then
   str3=Right(str2,1)&temp
   temp=str3    
end if
next
msgbox temp&a