“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
"TypeError: 'DataFrame' objects are mutable, thus they cannot be hashed" while sorting pandas dataframe index
提问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)])