【发布时间】:2018-02-21 04:41:19
【问题描述】:
我有一个熊猫系列,其中一个数组作为每个值的值,如下所示:
'Node'
.. ....
97 [355.0, 296.0]
98 [53.0, 177.0]
99 [294.0, 14.0]
100 [330.0, 15.0]
101 [100.0, 160.0]
102 [10.0, 220.0]
103 [330.0, 290.0]
我想查找包含值 330.0 的所有行的索引,即 100 和 103。
到目前为止我尝试过的是:
vals = [item for item in df.Node if item[0] == 330.0]
这给了我[array([ 330., 15.]), array([ 330., 290.])]
然后:
for val in vals:
id = pd.Index(df.Node).get_loc(val)
这会引发错误提示 TypeError: '[ 330. 15.]' is an invalid key
如何解决这个问题并获取值的行索引?
编辑:这是一个行数少得多的示例数据框。
0 [139.0, 105.0]
1 [290.0, 200.0]
2 [257.0, 243.0]
3 [235.0, 7.0]
4 [12.0, 115.0]
5 [168.0, 135.0]
6 [105.0, 258.0]
7 [339.0, 64.0]
8 [6.0, 148.0]
9 [33.0, 286.0]
10 [62.0, 26.0]
11 [307.0, 185.0]
12 [34.0, 269.0]
13 [206.0, 60.0]
14 [327.0, 127.0]
15 [127.0, 202.0]
16 [297.0, 48.0]
17 [131.0, 151.0]
18 [326.0, 1.0]
19 [304.0, 35.0]
20 [329.0, 23.0]
21 [314.0, 287.0]
22 [1.0, 233.0]
23 [260.0, 280.0]
24 [313.0, 56.0]
25 [294.0, 33.0]
26 [243.0, 256.0]
27 [151.0, 174.0]
28 [271.0, 295.0]
29 [141.0, 184.0]
30 [105.0, 157.0]
31 [288.0, 269.0]
32 [118.0, 210.0]
33 [38.0, 194.0]
34 [49.0, 154.0]
35 [40.0, 204.0]
36 [317.0, 27.0]
37 [359.0, 33.0]
38 [56.0, 184.0]
39 [359.0, 39.0]
40 [48.0, 170.0]
41 [314.0, 51.0]
42 [175.0, 184.0]
43 [28.0, 200.0]
44 [35.0, 169.0]
45 [330.0, 15.0]
46 [100.0, 160.0]
47 [10.0, 220.0]
48 [330.0, 290.0]
Name: Node, dtype: object
【问题讨论】:
-
您能否提供格式良好的数据框示例,以便我们测试一些代码?但看起来您的问题是由于列表格式造成的。
-
你得到错误的原因是因为 list 在 Python 中是不可散列的。
-
@MattR 现在用行数更少的数据框更新问题。
-
我强烈考虑使用@Alexander 的回答。将数据放入正确的格式以进行数据分析很重要。在单个单元格中保留多个值并不是存储数据的最佳方式。首先转换为具有两列的正确 DataFrame,然后进行正常的布尔选择。