在对 Pandas 数据帧进行排序时出现错误:"TypeError: 'DataFrame' 对象是可变的,因此它们无法被哈希"。

4
我有一个以下的数据框 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

我缺少什么?有什么想法吗?

你需要的是:h.sort_values('age')吗?你能提供一个期望的数据集吗? - MaxU - stand with Ukraine
@MaxU:我觉得我没听懂你的意思。我正在尝试根据“年龄”值来排列数据框的行。 - Peaceful
2个回答

5

这是你想要的吗?

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
我现在意识到了。没错,我犯了一个愚蠢的错误。 - Peaceful

1

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

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

但这样做也没有太大意义,因为它不会改变顺序。相反,你可以尝试:

h.sort_values(by='age')

然后:

h.reindex([range(some_number)])

那是另一种方法。我想知道我的方法有什么问题。 - Peaceful
1
你的方法问题在于索引是文件名而不是数字。 - Cenk_Mitir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接