“TypeError: 'DataFrame' 对象是可变的,因此它们不能被散列”在对 Pandas 数据帧索引进行排序时

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/43054217/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 03:17:18  来源:igfitidea点击:

"TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed" while sorting pandas dataframe index

pythonpython-3.xsortingpandasdataframe

提问by Peaceful

I have a following dataframe h:

我有以下数据框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

I am trying to sort the dataframe index according to age values:

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

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

This throws an error:

这会引发错误:

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

What am I missing? Any ideas?

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

回答by MaxU

Is that what you want?

那是你要的吗?

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

回答by Cenk_Mitir

I think your index is filename. Maybe you could try something like:

我认为您的索引是文件名。也许你可以尝试这样的事情:

h['index1'] = h.index
h.sort_values(by=['index1', 'age'])

But also it will not make so much sense since it will not change the order. Alternatively you can try:

但它也没有多大意义,因为它不会改变顺序。或者,您可以尝试:

h.sort_values(by='age')

Then:

然后:

h.reindex([range(some_number)])